Как раздавить недавние миграции 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