重命名模型会破坏迁移历史记录

时间:2016-10-09 19:26:00

标签: python django database-migration

我在两个不同的应用程序中有两个模型:

# app1 models.py
class App1Model(models.Model):
    pass


# app2 models.py
from app1.models import App1Model

class App2Model(App1Model):
    pass

我想重命名App1Model,然后重新创建App2Model,使其显式OneToOneField而不是魔术app1model_ptr。所以我创建了完全删除App2Model的迁移(因为无论什么原因,我都不关心数据),它运行成功。然后我在第一个应用程序中创建了迁移,它重命名了App1Model,它也运行得很完美,我用新名称和它的所有关系(以及它的关系)检查这个表,这很好。

然后发生了奇怪的事情:当我在app2上运行makemigrationsmigrate时出现错误

django.db.migrations.exceptions.InvalidBasesError: Cannot resolve bases for [<ModelState: 'app2.App2Model'>]

在第一次迁移app2(在app2迁移中为0001_initial.py)时创建当前项目状态时失败,其中第一次通过从App1Model继承旧名称创建此模型。 有没有办法解决这个问题?在当前状态App2Model已被删除,App1Model已重命名,由于此问题,我无法对app2上的迁移执行任何操作。

P.S。我使用Django 1.10.2

1 个答案:

答案 0 :(得分:2)

刚刚找到解决方案:

需要将我删除app2的{​​{1}}的上次迁移添加为App2Model迁移的依赖项,我重命名为app1,以便按正确的顺序构建项目状态。实际上错误信息本身有一些与之相关的东西,但我没注意到这一点:

  

如果您从应用程序继承模型,则会发生这种情况   没有迁移的应用程序中的迁移(例如contrib.auth);看到   https://docs.djangoproject.com/en/1.10/topics/migrations/#dependencies   更多

我把它放在这里以供将来我和那些将遭受类似事情的人使用。