2015-04-30 84 views
3

我有一个Model名为FooModel定义在my_app/models/foo.pyDjango迁移引用删除的模块

删除foo.py后,运行Django(1.7)迁移引发错误,因为旧的迁移文件导入了foo.pyimport myapp.models.foo.FooModel)。

我应该如何解决这个问题?

当模型有ImageFieldupload_to参数时会发生这种情况。

+0

你删除了'FooModel'还是移动了它? – aumo

+0

有时候,我删除了,这次我把它移开了。 – eugene

回答

1

有两种情况:

  1. 你搬到别处FooModel,然后编辑您的所有迁移文件,以反映这一举动。

  2. 您删除FooModel,在这种情况下,请按照下列步骤操作:

    • FooModel回到它在哪里。
    • 确保代码中没有其他地方提及FooModel
    • 运行./manage.py makemigrations my_app
    • 运行./manage.py squashmigrations my_app <migration created with the previous comand> - 看到doc对挤压迁移更多的信息。
    • 对其迁移中引用FooModel的任何应用重复上述两个步骤。
    • 删除FooModel和陈旧的迁移文件,一旦你确保一切正常工作。

这应该因为FooModel没有从任何其他模型中引用,应该从迁移文件时,挤压他们删除。

但是,要警告的是压缩迁移不是一个简单的操作,并且可能会导致将模型保留在代码库中而不使用它。

注意:在这种情况下,所讨论的对象是Django模型,但这适用于由迁移文件引用的任何类,函数或模块。

+0

谢谢!希望有一个简单的解决方案。但很高兴知道目前可用的最佳选择。 – eugene