南方的数据库迁移:如何处理添加的字段

时间:2015-04-17 04:05:08

标签: migration django-south

我正在开发一个生活在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)我只运行makemigrationsmigrate,但从未使用schemamigration。系统运行正常。我必须运行schemamigration吗?

1 个答案:

答案 0 :(得分:1)

1) 当你收到类似的错误消息时,基本上它要求一次性默认。选择选项2时你应该放在哪里完全取决于你的情况,但它必须是一个有效的Python表达式。例如:

  • 如果我想添加一个IntegerField,我可以输入0
  • 对于CharField,我可以使用"my string"(注意引号必须在那里)
  • 对于ForeignKey,我会指定我想要使用的对象的主键。

2) 这是南方最难的部分。必须仔细并手动合并冲突的迁移。替换南方的Django 1.7迁移在自动执行此操作方面要好得多,因此如果可能的话,升级到1.7 +。

3) 我相信makemigrationsschemamigration的别名。习惯makemigrations,因为它是在Django 1.7 +中调用的命令。