Django InconsistentMigrationHistory при добавлении начальной миграции приложения

Есть несколько интересных предложений в похожем вопросе, но это не помогает в решении моей проблемы. Кроме того, я использую это приложение в производстве в нескольких странах.

Мы мигрируем приложение и начали с managed=False на всех моделях. Затем у нас было приложение claim_batch, которое имеет миграцию 0002_capitationpayment:

    dependencies = [
        ('product', '__first__'),
        ('claim_batch', '0001_initial'),
    ]
    # Some models with foreign keys to "product.Product"

В модуле product нет миграций, но есть модели. Когда я делаю showmigrations в этой ситуации, я имею:

  product
    (no migrations)

И это работает нормально.

Проблема в том, что мне нужно добавить миграцию с управляемой таблицей в product. Когда я делаю makemigrations и пытаюсь migrate, я получаю:

django.db.migrations.exceptions.InconsistentMigrationHistory: Migration claim_batch.0002_capitationpayment is applied before its dependency product.0001_initial on database 'default'.

Имеет смысл. Заявление claim_batch.0002 ссылается на миграцию, которая сейчас существует, но не была применена, и не должно быть возможности применить ее после ее зависимости. За исключением этого сценария.

Если я пытаюсь удалить зависимость из уже примененной миграции, я получаю:

ValueError: The field claim_batch.CapitationPayment.product was declared with a lazy reference to 'product.product', but app 'product' isn't installed.

Я предполагаю, что чистая установка с этим будет работать нормально, но у меня есть производственные системы в разных странах, работающие в таком состоянии. Начинать с нуля - не вариант.

Я попытался создать миграцию 0001_initial для продукта и добавить его в таблицу django_migrations вручную, затем выдать команду migrate, но это не сработало, он все еще пытался (и не смог) применить миграцию. Возможен ли такой подход?

Я также пытался migrate product конечно, но он все еще загружает другие приложения и жалуется.

Спасибо за понимание.

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