南迁数据库:新增字段如何处理

Database migration with south: how to deal with added fields

我正在开发一个基于 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。我最终做了一个解决方法:makemigrationnull=True,删除 null=True,再次执行 makemigration,然后推送到 Heroku。

这是正确的做法吗?

2)使用南迁又会出现问题。因为我们是一个开发团队,每个成员都可以在his/her环境中进行迁移。在推送到 GitHub 时,每个应用程序的 migration 文件夹中的 00*_* 文件可能会相互冲突。如何解决?目前,我们只是忽略 00*_* 文件,因为我们的项目尚未投入生产。如果以后生产呢?

3) 我只用过运行 makemigrationsmigrate 从未用过schemamigration。不过系统 运行 没问题。我必须 运行 schemamigration 吗?

1) 当您收到这样的错误消息时,基本上是在请求一次性默认设置。选择选项 2 时究竟应该在其中输入什么完全取决于您的情况,但它必须是有效的 Python 表达式。例如:

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

2) 这是南方最难的部分。必须手动合并冲突的迁移。取代 South 的 Django 1.7 迁移更擅长自动执行此操作,因此如果可能的话,请升级到 1.7+。

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