【发布时间】:2018-04-04 00:06:13
【问题描述】:
我有一个相当复杂的项目架构,其中涉及多个模型包含交叉引用的应用程序。
例如,我有一个 billing.Premium 模型 - 属于 billing 应用程序 - 它被另一个名为 payments.PaymentJob 的模型通过一对一字段引用:
('premium', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to='billing.Premium', verbose_name='premium'))
(此代码来自payment 的迁移之一)
但是当我需要将billing.Premium 重命名为billing.PremiumInstallment 时,我遇到了一些问题,这就是有趣的部分:在重构我的代码以替换模型名称之后,我尝试将django-admin makemigrations,它导致以下错误:
ValueError: The field payments.PaymentJob.premium was declared with a lazy reference to 'billing.premium', but app 'billing' doesn't provide model 'premium'.
自从我重命名外部应用程序的模型后,我的迁移似乎已中断。我不知道如何以一种奇特的方式解决这个问题,我的意思是生成一些没有错误的迁移,并且当我运行 django-admin migrate 时会应用它。
有什么想法吗?
【问题讨论】:
-
我对 Django 建模不是很有经验,但是从错误中可以清楚地看出,您是否已经重命名了另一个引用的模型,然后由于找不到引用,所以不会迁移更改。看看这个,因为你的错误可以解决在不简单的架构上采取正确的步骤stackoverflow.com/questions/25091130/…
-
我做了,但是所有模型都在同一个应用程序中,因为我在两个独立的应用程序中有两个模型,我无法通过所描述的方法正确重构......
标签: python django django-migrations