【发布时间】:2014-01-07 15:53:06
【问题描述】:
我正在开发一个 Django 应用程序,但遇到了一个奇怪的问题,涉及 2 个南方的并行迁移。
一个迁移对应于创建一个新模型(我们称之为“0001_add_model”),第二个迁移对应于向现有模型添加一个字段(我们称之为“0001_add_new_field_to_model”)。现在,这 2 个迁移是在 2 个不同的分支中并行进行的(我不会再犯这个错误)。当我运行./manage.py migrate 时,South 告诉我有问题,我可以使用--merge 运行命令来运行迁移。鉴于这两个动作涉及不同的模型,我认为这样做应该没有问题,所以我做到了,一切都很顺利。
当我执行./manage.py schemamigration --auto 时,问题出现了,它为我生成了一个几乎与“add_model”相同的迁移,除了“add_field_to_model”中添加的字段。它看起来像这样:
( * ) 0001_auto__add_model
( * ) 0001_auto__add_new_field_to_model
-> ( ) 0002_auto__add_model
如果我反其道而行之,则会产生相反的结果,即迁移以添加在“add_field_to_model”中添加的字段。在这两种情况下,生成的新迁移显然都不适用,因为这些更改已经存在于数据库中。
令我困惑的是为什么它会产生这样的迁移。为了创建新的迁移,South 的自动检测器如何工作?
为了继续开发,我所做的是使用--fake 运行这个虚假迁移,但我认为最终的解决方案是重置从那时起的迁移历史,这很麻烦,因为它在多个环境中被复制。
【问题讨论】:
标签: python django parallel-processing migration django-south