Как раздавить недавние миграции Django?

В коде миграции Django существует команда squashmigrations, которая: "Сквош миграции для app_label до и включая migration_name вниз на меньшее количество миграций, если это возможно".

Итак, если вы хотите скворовать, скажем, первые 5 миграций, это поможет.

Какой лучший способ сквош, начинающийся с конкретного migration_name?

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

Ответ 1

python manage.py squashmigrations <appname> <squashfrom> <squashto>

python manage.py help squashmigrations

https://docs.djangoproject.com/en/dev/topics/migrations/#migration-squashing

Это даст вам более подробный контроль над тем, какие миграции выкапывают, и пусть вы сохраните более чистую историю фиксации. Удаление + воссоздание всех миграций может привести к другим проблемам, таким как циклические зависимости, в зависимости от того, как построены модели.

Ответ 2

Вы можете просто удалить файлы миграции и снова запустить makemigrations. Если у вас есть развертывание dev, которое использует их, вы должны перенести назад в тот, который был до первого, который вы удалите.

Кроме того, вероятно, рекомендуется сначала перенести ваш код, если что-то пойдет не так.

также:

Незначительное осложнение заключается в том, что если имеется специальный код RunPython, он не будет включен в новую миграцию, созданную makemigrations