为什么Django禁止在迁移图中有多个叶子?

b1uwtaje  于 2023-11-20  发布在  Go
关注(0)|答案(1)|浏览(179)

即时问题

当迁移图中有多个叶子时,Django拒绝迁移的原因是什么?我假设原因与SQLAlchemy docs中描述的相似:
分支的挑战是将分支合并成单个系列的改变,使得从任一源树单独建立的数据库可以被升级以同等地引用合并的结果。
换句话说,如果我们不必处理位于不同HEADS中的多个数据库,那么当我们有多个叶子时,可能会出现哪些其他问题(除了没有完全定义迁移的应用程序顺序)?
我在修改django后运行migrate命令不执行此检查,没有出现任何问题。
然而,django似乎不支持这种用例,因为除了montagatch/使用forked django之外,没有其他方法可以覆盖检查行为。
为什么我问
我们正在实施一种机制来处理Django应用程序上的无停机迁移。特别是,我们正在处理长时间运行的迁移,我们希望将其与短时间运行的迁移分开应用。
这意味着我们有两组独立应用的迁移,每组都有自己的HEAD。
我们有一个自定义机制来只运行给定类型的迁移。
检测到正在迁移;迁移图中有多个叶节点:。要修复它们,请运行'python manage.py makemigrations --merge
当有多个叶时。

jw5wzhpr

jw5wzhpr1#

我最近遇到了一个类似的问题。它发生在默认的auth表中。运行合并并没有解决这个问题。我的问题是,在auth. 0001-inital中,这个表有一个字段first_name,其中max_length被设置为30。(我已经创建了一个自定义用户模型)。稍后在django_migrations表列表中是0012_alter_user_first_name_max_length.py迁移,希望将此值重置为150(在我的例子中,这与group_permissions表的设置有关)这显然会导致与自定义用户模型的初始设置冲突。没有合并。我建议你使用mysqlworkbench并在django_migrations或终端运行python manage.py makemigrations,然后运行django manage.py showmigrations中获取一个迁移列表。然后在vscode这样的编辑器中打开每个迁移文件(使用终端的没有'x'的文件),并尝试查找www.example.com迁移和后续迁移之间的任何重复或分配值的差异initial.py。你可以在mysqlworkbench中创建一个迁移列表。可能还需要检查在依赖项下的迁移文件顶部列出的文件。依赖项文件也可能具有分配给字段名称的冲突值。

相关问题