У меня довольно сложная архитектура проекта, включающая несколько приложений, модели которых содержат перекрестные ссылки.
Например, у меня есть модель 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
.
Есть идеи?