Миграции 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, так это удаляет все миграции вашего приложения, а после повторного выполнения миграции все вернется обратно
и скажите мне, если вы все еще получаете какую-либо другую ошибку
Я успешно решил эту проблему! Вот шаги, которые я предпринял:
- добавьте вторую миграцию как зависимость к первой
- перейдите к таблице django_migrations в db и удалите первую миграцию (которая уже была запущена)
- запустите ТОЛЬКО вторую миграцию
- подделать первую миграцию (поскольку она уже была запущена)
- (ненужный шаг, но необходимый в моем случае) запустите migrate normal, чтобы закончить миграцию незадействованных миграций из других приложений