Миграции Django застревают после выполнения в неправильном порядке

Я сделал два изменения в разных моделях в моей базе данных.
Первое

operations = [
        migrations.DeleteModel(
            name='Settlement',
        ),
    ]

И второе:

operations = [
        migrations.RemoveField(
            model_name='invoice',
            name='settlement_deducted',
        ),
        migrations.RemoveField(
            model_name='invoice',
            name='settlement_supporting',
        ),
]

Проблема в том, что они выполнялись в таком порядке, и вторая миграция завершилась неудачей. Поле, удаляемое во второй миграции, использует модель "Расчеты", но поскольку эта модель была удалена в первой миграции, она выдает такую ошибку:

ValueError: The field invoices.Invoice.settlement_deducted was declared with a lazy reference to 'accounting.settlement', but app 'accounting' doesn't provide model 'settlement'.
The field invoices.Invoice.settlement_supporting was declared with a lazy reference to 'accounting.settlement', but app 'accounting' doesn't provide model 'settlement'

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

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

попробуйте это

py manage.py migrate <yourappname> zero

затем зайдите в ту же папку app и в той папке migration удалите все файлы, кроме pycache и init.py, а затем снова попробуйте запустить

py manage.py makemigrations
py manage.py migrate 

и, пожалуйста, замените py на python, если вы используете любой другой Os, а не windows, что делает migrate zero, так это удаляет все миграции вашего приложения, а после повторного выполнения миграции все вернется обратно

и скажите мне, если вы все еще получаете какую-либо другую ошибку

Я успешно решил эту проблему! Вот шаги, которые я предпринял:

  1. добавьте вторую миграцию как зависимость к первой
  2. перейдите к таблице django_migrations в db и удалите первую миграцию (которая уже была запущена)
  3. запустите ТОЛЬКО вторую миграцию
  4. подделать первую миграцию (поскольку она уже была запущена)
  5. (ненужный шаг, но необходимый в моем случае) запустите migrate normal, чтобы закончить миграцию незадействованных миграций из других приложений
Вернуться на верх