Django:&#34;列<whatever>不存在&#34;在运行数据迁移时

时间:2016-07-28 17:03:22

标签: django django-migrations

说我有这些迁移:

  • 0001_initial
  • 0002_add_some_column
  • 0003_some_data_migration

此时一切正常,但如果我再添加一个架构迁移:

  • 0004_add_的 _column

然后尝试针对新数据库或任何尚未拥有0003的数据库运行迁移,0003会因为&#34;列栏不存在而导致出现#34;。

处理该方案的正确方法是什么?在添加架构迁移时,是否始终必须重新进行数据迁移,以便数据迁移始终是最后的?有没有办法让数据迁移不关心&#34; bar&#34;还不存在吗?数据迁移并没有使用&#34; bar&#34;,但由于某种原因,Django仍然认为它需要它存在于那一点......

我使用内置的Django迁移,而不是南方。

1 个答案:

答案 0 :(得分:2)

您如何在数据迁移中访问模型?

确保通过apps / schema_editor访问ORM,而不是直接导入模型。

传递给迁移工作者函数的第一个参数是一个应用程序注册表,其中包含加载到其中的所有模型的历史版本,以匹配迁移所在历史记录中的位置。

即。在您的数据迁移中,您不应该有这样一行:

from my_app import MyModel

而是更像这样的东西

MyModel = apps.get_model("my_app", "MyModel")