首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django迁徙令

django迁徙令
EN

Stack Overflow用户
提问于 2016-04-11 08:32:28
回答 1查看 12.7K关注 0票数 12

我们正在开发一个web应用程序,它有一个中央应用程序,最后我们添加了一个新应用程序。

迁移令如下:

代码语言:javascript
复制
contenttypes 0001 
contenttypes 0002

auth         0001
...
auth         0006

main_app     0001
...
main_app     0045

添加新应用程序后,迁移的顺序如下:

代码语言:javascript
复制
contenttypes 0001
auth         0001
main_app     0001
...
main_app     0045
contenttypes 0002
auth         0002
...
auth         0006
new_app      0001

有几件事值得注意:

  1. new_app.0001迁移具有依赖关系(按此顺序): auth.0006 main_app.0045 并且只为用户创建一个外键。
  2. auth.0004迁移更新用户名,使其最大长度为30
  3. my_app.0012user.username字段修改为长度为255 (通过某些AlterField-derived类)

因此,由于迁移的运行顺序,不使用new_app,因此user.username长度为30而不是255。

在最初的my_app迁移中,我们有以下依赖项:

代码语言:javascript
复制
migrations.swappable_dependency(settings.AUTH_USER_MODEL)

(在更改默认django用户模型时,这似乎是必需的)。

的问题是:为什么迁移的顺序是变化的?如何预防?

注意:通过在初始迁移中添加一个依赖项,我们找到了一种防止这种情况的“黑客”方法:

代码语言:javascript
复制
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
auth.0006

但我们不认为这是一个可行的解决办法,因此我们正在寻找一个更好的解决办法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-11 08:52:26

Django试图创建一个一致的迁移顺序,首先按照字母顺序对所有依赖项进行排序,然后使用深度优先搜索来创建最终的迁移计划。由于迁移计划总是在运行时得到解决,因此单个更改有时会对最终的迁移计划产生重大影响。

如果您需要一次又一次的迁移,添加依赖项是正确的解决方案。迁移的设计使您可以自己编写,如果自动生成的迁移不适合您的需要。医生们讨论了如何控制迁移的顺序。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36543596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档