我们正在开发一个web应用程序,它有一个中央应用程序,最后我们添加了一个新应用程序。
迁移令如下:
contenttypes 0001
contenttypes 0002
auth 0001
...
auth 0006
main_app 0001
...
main_app 0045添加新应用程序后,迁移的顺序如下:
contenttypes 0001
auth 0001
main_app 0001
...
main_app 0045
contenttypes 0002
auth 0002
...
auth 0006
new_app 0001有几件事值得注意:
new_app.0001迁移具有依赖关系(按此顺序):
auth.0006 main_app.0045
并且只为用户创建一个外键。auth.0004迁移更新用户名,使其最大长度为30my_app.0012将user.username字段修改为长度为255 (通过某些AlterField-derived类)因此,由于迁移的运行顺序,不使用new_app,因此user.username长度为30而不是255。
在最初的my_app迁移中,我们有以下依赖项:
migrations.swappable_dependency(settings.AUTH_USER_MODEL)(在更改默认django用户模型时,这似乎是必需的)。
的问题是:为什么迁移的顺序是变化的?如何预防?
注意:通过在初始迁移中添加一个依赖项,我们找到了一种防止这种情况的“黑客”方法:
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
auth.0006但我们不认为这是一个可行的解决办法,因此我们正在寻找一个更好的解决办法。
发布于 2016-04-11 08:52:26
Django试图创建一个一致的迁移顺序,首先按照字母顺序对所有依赖项进行排序,然后使用深度优先搜索来创建最终的迁移计划。由于迁移计划总是在运行时得到解决,因此单个更改有时会对最终的迁移计划产生重大影响。
如果您需要一次又一次的迁移,添加依赖项是正确的解决方案。迁移的设计使您可以自己编写,如果自动生成的迁移不适合您的需要。医生们讨论了如何控制迁移的顺序。
https://stackoverflow.com/questions/36543596
复制相似问题