Поле 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 в качестве зависимости.

Но затем я возвращаюсь к исходному сообщению об ошибке.

Как я могу исправить этот беспорядок?

Вернуться на верх