- 1. Как это сделать?
- 2. Вывод
В процессе разработки проекта на Django мы можем столкнуться с неприятной ситуацией, когда некоторые пакеты и модули были удалены и, соответственно, модели из этих пакетов больше не использовались. Но в то же время сквош миграций приложений не позволяет удалить эти пакеты, так как миграции имеют много циклических зависимостей. В результате удаление ненужных пакетов становится довольно сложной задачей. Так как разрешение таких зависимостей становится нетривиальной задачей. Для меня таким неприятным пакетом был Django CKEditor, который присутствовал почти везде. В итоге этот пакет из-за миграций довольно долго оставался в списке requirements.txt, хотя по факту на сайте вообще не использовался.
Чтобы избавиться от таких зависимостей миграций, нужно удалить все миграции, при этом не удаляя контент, который был создан этими миграциями. А затем создать новую начальную миграцию и применить ее к базе данных также без внесения новых изменений в структуру базы данных.
Как это сделать?
Вернуть все миграции в нулевое состояние с параметром fake. Это означает, что информация о миграции будет удалена, но содержимое не изменится.
python manage.py migrate app zero --fake
Удалить файлы миграции из репозитория
git rm "app/migrations/*"
Создайте новый файл миграции
python manage.py makemigrations app
Запустите новую миграцию с параметром fake, чтобы добавить информацию о миграции в базу данных, но не изменять структуру базы данных.
python manage.py migrate app --fake
Вывод
Внимательно применяйте этот подход к настройке миграций и лучше создайте новую миграцию на тестовом сервере, чтобы убедиться, что вы все делаете правильно и база данных не сломается.
При этом на тестовом сервере можно создать новую миграцию и добавить ее в репозиторий git.
Затем на рабочем сервере вам нужно будет сделать следующее.
python manage.py migrate app zero --fake git pull python manage.py migrate app --fake
For Django, I recommend Timeweb VDS-server .