Поле oldapp.MyModel.related было объявлено с ленивой ссылкой на 'oldapp.related', но приложение 'oldapp' не предоставляет модель 'related'
Подобные вопросы задавались и раньше, но ни один из них не применим к моей ситуации, насколько я могу судить.
Я последовал этому ответу , чтобы переместить модель Related
из oldapp
в newapp
.
Я создал следующую миграцию в oldapp
:
class Migration(migrations.Migration):
dependencies = [
("oldapp", "0019_merge_20220626_1439"),
]
database_operations = [
migrations.AlterModelTable("Related", "newapp_related"),
migrations.AlterModelTable("AnotherRelated", "anothernewapp_AnotherRelated"),
]
state_operations = [
migrations.DeleteModel("Related"),
migrations.DeleteModel("AnotherRelated"),
]
operations = [
migrations.SeparateDatabaseAndState(
database_operations=database_operations,
state_operations=state_operations,
)
]
Обратите внимание, что на самом деле я переношу две модели в два новых приложения. Однако, MyModel
имеет внешний ключ только к Related
, поэтому я включу пример кода только для модели Related
. Кроме того, MyModel
по-прежнему находится в oldapp
и по-прежнему имеет внешний ключ к Related
.
В newapp
я добавил этот переход (0001_initial):
class Migration(migrations.Migration):
initial = True
dependencies = [
("oldapp", "0020_move_related_and_anotherrelated_to_own_apps"),
]
state_operations = [
migrations.CreateModel(
name='Related',
fields=[
# ...
],
# etc.
),
]
operations = [
migrations.SeparateDatabaseAndState(state_operations=state_operations)
]
Запуская миграции, я получаю следующую ошибку:
ValueError: The field oldapp.MyModel.related was declared with a lazy reference to 'oldapp.related', but app 'oldapp' doesn't provide model 'related'.
Я думал, что могу просто добавить это к oldapp.migrations.0020_move_related_and_anotherrelated_to_own_apps
:
operations = [
migrations.SeparateDatabaseAndState(
database_operations=database_operations,
state_operations=state_operations,
),
migrations.AlterField(
model_name='mymodel',
name='related',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='newapp.related')
),
]
Но потом я получаю: ValueError: Related model 'newapp.related' cannot be resolved
Что имеет смысл, потому что миграции в newapp
еще не запущены. Поэтому я поместил операцию AlterField
в новую миграцию в oldapp
(0021) и добавил newapp.migrations.0001_initial
в качестве зависимости.
Но затем я возвращаюсь к исходному сообщению об ошибке.
Как я могу исправить этот беспорядок?