我在Model
中定义了名为FooModel
的{{1}}。
删除my_app/models/foo.py
后,运行Django(1.7)迁移会引发错误,因为旧的迁移文件导入foo.py
(foo.py
)。
我该如何解决这个问题?
当模型的import myapp.models.foo.FooModel
参数为ImageField
时会发生这种情况。
答案 0 :(得分:4)
有两种情况:
您已将FooModel
移至其他位置,然后编辑所有迁移文件以反映该移动。
您已删除FooModel
,在这种情况下,请按以下步骤操作:
FooModel
放回原处。FooModel
的引用。./manage.py makemigrations my_app
./manage.py squashmigrations my_app <migration created with the previous comand>
- 有关压缩迁移的更多信息,请参阅doc。FooModel
的任何应用重复前两个步骤。FooModel
和陈旧的迁移文件。这应该有效,因为当FooModel
没有从任何其他模型引用时,应该在压缩它们时从迁移文件中删除它。
但是,请注意,压缩迁移并不是一项简单的操作,可能会产生影响,因此在不使用模型的情况下将模型保留在代码库中可能更好。
注意:在这种情况下,有问题的对象是Django模型,但这适用于迁移文件引用的任何类,函数或模块。
答案 1 :(得分:0)
在自定义数据库迁移中,您不应直接导入模型,因为将来您可能会遇到此特定问题。相反,您应该使用Django的get_model
函数。
MyModel = apps.get_model('myapp', 'MyModel')
for row in MyModel.objects.all():
row.uuid = uuid.uuid4()
row.save(update_fields=['uuid'])
在这种情况下,当您决定将来删除模型时,迁移也会运行。
进一步阅读:https://docs.djangoproject.com/en/2.2/howto/writing-migrations/