1
HashV2 2023-11-06 09:55:50 +08:00
对包里面的 models 进行更改不是就已经更改了 venv 环境了吗?话说为什么你会对包里面的 models 进行更改
|
2
coolair OP @HashV2 #1 对包里面的 models 进行更改,可以不修改 venv 环境啊,比如,我想加个字段,可以引入这个 model 然后用 add_to_class 添加一个字段。
|
3
HashV2 2023-11-06 10:18:24 +08:00
@coolair 我之前是在自己的包里继承原 model 添加重写的,然后在 settigns.py 里 DATABASE_ROUTERS 指定原 app_label 的 allow_migrate=False ,不知道是否适用你的场景
|
4
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 的修改记录 |
5
Hstar 2023-11-06 10:29:50 +08:00
你不应该用 add_to_class 持久的修改一个 Model ,这是用来临时附加模型字段用的。
如果你需要改其他包里的 models ,可以在自己包里继承一个继续写,然后更改 model 饮用指向。如果要改更多逻辑,唯一稳妥的办法就是不使用 pip 而是把包直接下载到项目目录当作一个 app 来玩。 |
6
HashV2 2023-11-06 10:34:40 +08:00
@crazycookie 还是要看业务场景,如果不记录 migrations 变更记录文件的话,初始化部署没有问题,但是在服务器增量更新的时候需要 makemigrations ,这个阶段可能会有预料之外的错误。
|
7
founddev 2023-11-06 10:34:40 +08:00
版本控制 migrations 文件,线上环境不应该进行 makemigrations
|
8
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 |