2016-07-28 35 views
2

说我有这些迁移:Django的: “列​​不存在”,同时运行数据迁移

  • 0001_initial
  • 0002_add_some_column
  • 0003_some_data_migration

一切都很好,在那点,但如果我再添加一个模式迁移:

  • 0004_add_ 酒吧 _column

,然后尝试运行针对一个新的DB的迁移,或任何DB不具有0003的是,0003将博克,因为“不存在的列巴” 。

处理这种情况的正确方法是什么?添加模式迁移时,是否必须重新完成数据迁移,这样数据迁移总是会持续下去?有没有办法让数据迁移不在意“酒吧”还不存在?数据迁移没有使用“酒吧”,但由于某种原因,Django仍然认为它需要它存在的那一点...

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

回答

2

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

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

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

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

from my_app import MyModel 

而是更多的东西像这样

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

我的应用程序使用'为MyModel = apps.get_model( '程序my_app' ,'my_model)'来获取模型,然后通过'MyModel.objects.create()'创建东西。那是正确的方法吗? – Troy

+1

其实,貌似有一个模型直接导入。这一定是问题。谢谢你的帮助! – Troy