Поле 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 в качестве зависимости.
Но затем я возвращаюсь к исходному сообщению об ошибке.
Как я могу исправить этот беспорядок?