Как reset южные миграции для захвата текущего состояния моих моделей django

У меня есть приложение, которое в настоящее время имеет 35 южных миграций. Это занимает некоторое время, чтобы пройти при настройке нового развертывания (мы часто создаем новые развертывания), и приложение постоянно развивается - добавление дополнительных миграций. Кроме того, миграция включает в себя некоторые потенциально сложные миграции данных и несколько пользовательских миграций, которые ломают SQLite3 (сейчас это не огромная проблема, поскольку все на Postgres, но ее приятно настроить быстродействующую тестовую среду) и, как правило, просто больше вещи, которые могут пойти не так.

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

Ответ 1

Я понял это (не так уж плохо). Чтобы настроить миграцию reset, я делаю следующее:

rm <app-dir>/migrations/*
python manage.py schemamigration <app-name> --initial
python manage.py migrate <app-name> 0001 --fake  --delete-ghost-migrations

Я фиксирую изменения в репозитории, а затем для каждого развертывания кода в другом месте выполните:

python manage.py migrate <app-name> 0001 --fake --delete-ghost-migrations

Удостоверьтесь, что вы не добавляете ничего нового между моментом, когда вы последний раз мигрировали повсюду, а вы reset вещи или новая миграция 0001 не совпадают со схемой!

Предостережения: см. комментарий геттли (и мои ответы)