我正在开发一个生活在Heroku上的django项目。随着项目的发展,将新字段添加到数据模型时会出现问题:在makemigration
期间,south
会询问以下内容:
...
? 1. Quit now, and add a default to the field in models.py
? 2. Specify a one-off value to use for existing columns now
...
要解决这个问题并不容易(我尝试选择第二个答案,但south
不接受我输入的内容。
问题:
1)有人建议应将null=True
添加到新字段以避免此类问题。但是,该字段不应为null
。我最终制定了一个解决方法:makemigration
null=True
,删除null=True
,再次执行makemigration
,然后推送到Heroku。
这是正确的做法吗?
2)使用南迁移会导致另一个问题。因为我们是一个开发团队,所以每个成员都可以在他/她的环境中执行迁移。在推送到GitHub时,每个应用程序的00*_*
文件夹中的migration
个文件可能会相互冲突。怎么解决?目前,我们只是忽略了00*_*
文件,因为我们的项目尚未投入生产。如果以后生产该怎么办?
3)我只运行makemigrations
和migrate
,但从未使用schemamigration
。系统运行正常。我必须运行schemamigration
吗?
答案 0 :(得分:1)
1) 当你收到类似的错误消息时,基本上它要求一次性默认。选择选项2时你应该放在哪里完全取决于你的情况,但它必须是一个有效的Python表达式。例如:
0
"my string"
(注意引号必须在那里)2) 这是南方最难的部分。必须仔细并手动合并冲突的迁移。替换南方的Django 1.7迁移在自动执行此操作方面要好得多,因此如果可能的话,升级到1.7 +。
3)
我相信makemigrations
是schemamigration
的别名。习惯makemigrations
,因为它是在Django 1.7 +中调用的命令。