/ / Django Migrations ValueError: […] було оголошено з ледачим посиланням на […] - python, django, django-migrations

Django Migration ValueError: [...] був оголошений лениво посиланням на [...] - python, django, django-migrations

У мене досить складна архітектура проекту, яка включає кілька додатків, моделі яких містять перехресні посилання.

Наприклад, у мене є billing.Premium модель - яка належить billing app - на яку посилається інша модель payments.PaymentJob через a одне в одне поле:

("premium", models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to="billing.Premium", verbose_name="premium"))

(Цей код надходить від одного з payment"s міграції)

Але я прийшов до певного моменту, коли мені потрібно перейменувати 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.

Будь ідея?

Відповіді:

0 для відповіді № 1

Відповідно до документи для RenameModel операція

Можливо, вам доведеться вручну додати це, якщо ви змінитеім'я моделі та кілька її полів одночасно; для автоматичного детектора, це виглядатиме так, як ви видалили модель зі старою назвою та додали нову з іншим ім'ям, а міграція, яку вона створює, втратить всі дані у старій таблиці.

Необхідно вручну створити міграцію та додати RenameModel операції

class Migration(migrations.Migration):

dependencies = [
("billing", "xxxx_previous_migration"),
]

operations = [
migrations.RenameModel("Premium", "PremiumInstallment")
]