【问题标题】:Django migration dependency orderDjango 迁移依赖顺序
【发布时间】:2023-04-06 22:55:01
【问题描述】:

我有一组相对复杂的 Django 模型。我正在尝试从一组新的迁移开始 (rm -rf apps/*/migrations; bin/dev/manage.py makemigrations A B C...)。 makemigrations 工作正常,并且没有循环依赖关系,但我在迁移时一直收到 InconsistentMigrationHistory 异常。这是迁移之间的依赖关系图,简化以删除没有相关依赖关系的迁移,并且为了可读性而编辑了应用程序名称: 红色的链接会导致错误(每次我运行 migrate 时会出现不同的错误),即使在每个迁移中添加了 run_before,应该在其依赖项之前运行:

A/migrations/0002_whatever.py:

...
run_before = [('P', '0001_initial'),]

这是错误文本。

django.db.migrations.exceptions.InconsistentMigrationHistory: Migration `P.migrations.0001_initial` is applied before its dependency `A.migrations.0002_whatever` on database 'default'.

有什么想法吗?

【问题讨论】:

  • 您也尝试重置数据库对吗?
  • 嗯。删除数据库并重新创建后,迁移工作。
  • 这样想,在不删除数据库的情况下,您删除了迁移。所以当你尝试迁移时,django 会发现你的数据库状态和迁移不一致
  • 嗨@ScottDeerwester,您是自己创建了图表还是有任何工具可以生成依赖图?
  • 我使用了 dot 语言,它是 graphviz 包的一部分。非常简单。

标签: django django-models


【解决方案1】:

您还需要重置数据库。

当您在未重置数据库的情况下创建新迁移时,您的数据库和迁移之间的同步丢失。

所以当你尝试迁移新的迁移时,Django 会发现它不一致并失败。

出于同样的原因,清除所有迁移并生成新迁移通常不是一个好主意。

想象一下这种情况在生产中发生。

【讨论】:

  • 感谢您的回复。这是一个正在大力开发的系统,因此重新开始迁移的情况虽然不寻常,但并非不合理。我们当然不会在生产中考虑这样的事情。
猜你喜欢
  • 2020-08-14
  • 2015-04-12
  • 2021-10-25
  • 1970-01-01
  • 2016-10-09
  • 2016-05-12
  • 1970-01-01
  • 2019-03-02
  • 2020-07-30
相关资源
最近更新 更多