Django - Урок 046. Сброс миграций в проекте

Django, Model, Reset

В процессе разработки проекта на Django мы можем столкнуться с неприятной ситуацией, когда какие-то пакеты и модули были удалены и соответственно перестали использоваться модели из данных пакетов. Но при этом squash миграций приложений не позволяет удалить эти пакеты, поскольку миграции имеют много циклических зависимостей. В следствие чего удалить ненужные пакеты становится довольно тяжёлой задачей. Поскольку разрешение подобных зависимостей становится нетривиальной задачей. Для меня таким неприятным пакетом стал Django CKEditor, который присутствовал практически везде. В итоге данный пакет из-за миграций оставался довольно долго в списке requirements.txt, хотя по факту не использовался на сайте вовсе.

Для того, чтобы избавиться от подобных зависимостей миграций нужно удалить все миграции, при этом не удаляя контент, который был создан данными миграциями. А потом создать новую initial миграцию и применить её к базе данных также без внесения новых изменений в структуру базы данных.

Как это сделать?

  1. Вернуть все миграции к нулевому состоянию с параметром fake. Это означает, что информация о миграциях будет удалена, но при этом контент изменяться не будет

    python manage.py migrate app zero --fake

  2. Удалить файлы миграции из репозитория

    git rm "app/migrations/*"

  3. Создать новый файл миграции

    python manage.py makemigrations app

  4. Запустить новую миграцию с параметром fake, чтобы добавить информацию о миграции в базу данных, но при этом не изменять структуру базы данных

    python manage.py migrate app --fake

Заключение

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

При этом на тестовом сервере можно создать новую миграцию и добавить её в git репозиторий.

После чего на боевом сервере нужно будет сделать следующие действия.

python manage.py migrate app zero --fake
git pull
python manage.py migrate app --fake

Для Django рекомендую VDS-сервера хостера Timeweb .

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
Поддержать автора Donate

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Ищу работу?
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы

ДШ
21 сентября 2019 г. 14:55
Дмитрий Шилков

C++ - Тест 001. Первая программа и типы данных

  • Результат:46баллов,
  • Очки рейтинга-6
s
18 сентября 2019 г. 17:19
sanyalitv

C++ - Тест 002. Константы

  • Результат:33баллов,
  • Очки рейтинга-10
s
18 сентября 2019 г. 17:12
sanyalitv

C++ - Тест 001. Первая программа и типы данных

  • Результат:80баллов,
  • Очки рейтинга4
Последние комментарии
M
20 сентября 2019 г. 11:25
Mark

вызываю метод get у m_downloader в другом методе и приложение начинает вылетать. В чем ошибка?
M
19 сентября 2019 г. 5:45
Mark

А вот как выгрузить файл на сервер по http протоколу? Допустим на regRu. И как получить путь файла, которой отображается в файловом менеджере regRu, чтобы загрузить его.
17 сентября 2019 г. 6:07
Misha Lebedev

Кстати интересные темы нашёл тут https://emacsway.github.io/ru/django-framework/#django-models Может что полезного тоже Евгений найдёте
17 сентября 2019 г. 4:50
Misha Lebedev

Доброго времени суток. Спасибо за хороший ответ, У меня ситуация така что в галлереи будет несколько миллионов фотографий с фильтрами и тегами , и я опасаюсь за производительност . Это ос…
17 сентября 2019 г. 3:23
Евгений Легоцкой

Добрый день. Да, я тоже читал ту статью в своё время и согласен с тем, что внешние ключи гораздо лучше, чем GenericForeignKey. Выборки в ряде случае работают быстрее. Но лично мне про…
Сейчас обсуждают на форуме
C
21 сентября 2019 г. 13:58
Cobra91151

Здравствуйте! Как вариант могу вам посоветовать QFtp класс, с помощью него можна просматривать, удалять, переименовывать и т.д файлы на сервере через клиентское ПО. Если вас такое интересу…
МС
21 сентября 2019 г. 12:51
Михаил Сермяжко

Так работает import QtQuick 2.7import QtQuick.Window 2.2import QtQuick.Controls 2.0Window { id: demo width: 800 height: 600 visible: true color: "#ff303030" prope…
МС
21 сентября 2019 г. 11:46
Михаил Сермяжко

Говорят через делегат должно работать: ListView{ id:l anchors.fill: parent model: ["data 1","data 2","data 3"] currentIndex : 2 delegate: Text { Rectangle{ …
C
21 сентября 2019 г. 9:08
Cobra91151

Здравствуйте! Я хочу подключатся к сетям WiFi Enterprise через свою программу. Настроил Radius Server, поключение к сети через Windows работает. Но при подключении через программу пишет: о…
20 сентября 2019 г. 4:56
Pavel K.

Привет , подскажите кто-нибудь , как сделать драг н дроп , не нарушая при этом логику работы зума? import QtQuick 2.6 import QtGraphicalEffects 1.0 Page { id:win property string fi…
EVILEG
О нас
Услуги
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB