Django: "column <whatever> does not exist" while 运行 数据迁移

Django: "column <whatever> does not exist" while running a data migration

假设我有这些迁移:

此时一切都很好,但如果我再添加一个架构迁移:

然后尝试运行 迁移到一个新的数据库,或者任何还没有 0003 的数据库,0003 将会失败,因为 "column bar does not exist"。

处理这种情况的正确方法是什么?添加模式迁移时,是否总是必须重新进行数据迁移,以便数据迁移总是最后进行?有没有办法让数据迁移不关心 "bar" 还不存在?数据迁移没有使用 "bar",但出于某种原因,Django 仍然认为它需要它在那个时候存在...

我正在使用内置的 Django 迁移,而不是 South。

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

确保通过应用程序访问 ORM / schema_editor 而不是直接导入模型。

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

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

from my_app import MyModel

而是更像这样的东西

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