重命名模型打破了迁移历史

问题描述 投票:0回答:2

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

# 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 上的迁移执行任何操作。

附注我使用 Django 1.10.2

python django database-migration
2个回答
2
投票

刚刚找到解决方案:

需要添加上次迁移的

app2
(我删除了
App2Model
)作为对
app1
(我重命名为
App1Model
)的迁移的依赖项,以便项目状态将以正确的顺序构建。实际上错误消息本身有一些与之相关的东西,但我没能抓住要点:

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

我把它放在这里是为了将来的我和那些将遭受类似事情的人。


0
投票

删除: 删除表“yourApp_table”; 删除所有文件“pycache” 删除所有0001_initial.py(不要删除init.py)

python manage.py makemigrations
python 管理.py 迁移

© www.soinside.com 2019 - 2024. All rights reserved.