Django makemigrations 生成的 migrations 文件,如何放在代码当前目录的文件夹中?

2023-11-06 09:27:38 +08:00
 coolair
自己创建的 app 默认就在 app 目录下的 migrations 文件夹中,如果是使用 pip 安装的包,对包里面的 models 进行了变更,对应的 migrations 就放在 venv 下包的目录里了。

有没有办法将这些 migrations 文件放在修改他代码的当前目录下的 migrations 里,保证 venv 环境不会变更?
1890 次点击
所在节点    Django
8 条回复
HashV2
2023-11-06 09:55:50 +08:00
对包里面的 models 进行更改不是就已经更改了 venv 环境了吗?话说为什么你会对包里面的 models 进行更改
coolair
2023-11-06 10:07:41 +08:00
@HashV2 #1 对包里面的 models 进行更改,可以不修改 venv 环境啊,比如,我想加个字段,可以引入这个 model 然后用 add_to_class 添加一个字段。
HashV2
2023-11-06 10:18:24 +08:00
@coolair 我之前是在自己的包里继承原 model 添加重写的,然后在 settigns.py 里 DATABASE_ROUTERS 指定原 app_label 的 allow_migrate=False ,不知道是否适用你的场景
crazycookie
2023-11-06 10:23:33 +08:00
migrations 对应的是 db 的修改记录
如果一个全新的项目( 数据为 0 的情况下,是有文件夹但是里面没有 0 开头的 migrate 文件的)

对于 migrations 文件的矛盾点是:要不要进入 Git 的版本管理

如果不版本管理 gitignore 的话,记得要自己在文件夹中 touch __init__.py 文件,不然的话,migrate 运行的时候没有效果(笑

如果放入 Git 的问题是,如果你多个实例运行,db 不一样的话,挺痛苦的, 而且,还有 migrate 的时候,的选择项不一样

结论:
我自己的项目是 gitignore migrations 文件夹的, 因为他是 migrate db 的 log 记录,没必要放到 Git 代码库中

所以,你 pip 发布的时候,migrations 文件就应该是无的, 以后产生的内容,是使用者自己生成的管理他对应的 db 的修改记录
Hstar
2023-11-06 10:29:50 +08:00
你不应该用 add_to_class 持久的修改一个 Model ,这是用来临时附加模型字段用的。

如果你需要改其他包里的 models ,可以在自己包里继承一个继续写,然后更改 model 饮用指向。如果要改更多逻辑,唯一稳妥的办法就是不使用 pip 而是把包直接下载到项目目录当作一个 app 来玩。
HashV2
2023-11-06 10:34:40 +08:00
@crazycookie 还是要看业务场景,如果不记录 migrations 变更记录文件的话,初始化部署没有问题,但是在服务器增量更新的时候需要 makemigrations ,这个阶段可能会有预料之外的错误。
founddev
2023-11-06 10:34:40 +08:00
版本控制 migrations 文件,线上环境不应该进行 makemigrations
mike1936
2023-11-06 16:13:12 +08:00
`<项目目录>/<项目名>/settings.py` 里的 MIGRATION_MODULES 配置可以把第三方 app 的 migrations 进行重定向,例如设置:
```
MIGRATIONS_MODULES = {
'auth': 'migrations.auth',
}
```
会将第三方的名为 auth 的 app 的 migrations 模块的索引转移到`<项目目录>/auth/migrations/`里,然后就可以都放进版本控制里了,btw:第三方的 app 名可以通过 showmigrations 查看

至于版本控制,修改 model 的 commit 顺便要执行 makemigrations/自己构造 migrations 文件并把迁移文件加到同一个 commit 里,其他机器 pull 下来之后只 migrate

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/988935

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX