我在两个不同的应用程序中有两个模型:
# 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上运行makemigrations
或migrate
时出现错误
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
答案 0 :(得分:2)
刚刚找到解决方案:
需要将我删除app2
的{{1}}的上次迁移添加为App2Model
迁移的依赖项,我重命名为app1
,以便按正确的顺序构建项目状态。实际上错误信息本身有一些与之相关的东西,但我没注意到这一点:
如果您从应用程序继承模型,则会发生这种情况 没有迁移的应用程序中的迁移(例如contrib.auth);看到 https://docs.djangoproject.com/en/1.10/topics/migrations/#dependencies 更多
我把它放在这里以供将来我和那些将遭受类似事情的人使用。