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

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

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

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

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

2 ответов


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

python manage.py help squashmigrations

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

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


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

кроме того, вероятно, неплохо сначала зафиксировать код, если что-то пойдет не так.

также:

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