У мене досить складна архітектура проекту, яка включає кілька додатків, моделі яких містять перехресні посилання.
Наприклад, у мене є 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")
]