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

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Как стать автором?

Внесите вклад в развитие сообщества EVILEG.

Узнайте, как стать автором сайта.

Изучить
Donate

Добрый день, Дорогие Пользователи !!!

Я Евгений Легоцкой, разработчик EVILEG. И это мой хобби-проект, который помогает учиться программированию другим программистам и разработчикам

Если сайт помог вам, и вы хотите также поддержать развитие сайта, то вы можете сделать пожертвование следующими способами

PayPalYandex.Money
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг Timeweb
5 июня 2020 г. 23:20
Алексей

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:60баллов,
  • Очки рейтинга-1
5 июня 2020 г. 23:15
Алексей

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

  • Результат:53баллов,
  • Очки рейтинга-4
V
5 июня 2020 г. 16:47
Vladzo

C++ - Тест 005. Структуры и Классы

  • Результат:83баллов,
  • Очки рейтинга4
Последние комментарии
6 июня 2020 г. 15:13
Владислав Меленчук

Как установить и настроить Django JET

Можно использовать six и оттуда импортировать unicode. Я так решил проблему) Но всё равно откатился обратно на админку джанги.
6 июня 2020 г. 11:20
BL4CK R4BBIT

Как установить и настроить Django JET

на Django >3+ работать не будет. Либо придется лезть внутрь и переопределять метод unicode . Либо писать декоратор
5 июня 2020 г. 10:52
progammist

Распознавание изображений на Python с помощью TensorFlow и Keras

Огромное спасибо за метериал, по-больше бы подобных статей (с подробным описанием работы и примерами применения) на тему современных технологий. Вопрос поразмышлять. На текущий момент реал…
5 июня 2020 г. 1:39
Евгений Легоцкой

Qt/C++ - Урок 091. Как написать кастомный делегат управляющий подсветкой строки в таблице

По-моему, смысла в этом нет особого. Если делегат будет игнорировать настройки таблицы, то это приведёт ещё к большему непониманию, что вообще происходит, для программиста, который после вас буд…
5 июня 2020 г. 1:34
IscanderChe

Qt/C++ - Урок 091. Как написать кастомный делегат управляющий подсветкой строки в таблице

Сижу, размышляю: можно ли переписать делегата так, чтобы независимо от настроек строк выделялись строки?
Сейчас обсуждают на форуме
u
6 июня 2020 г. 7:26
ubomj

Галерея изображений

delete
s
6 июня 2020 г. 1:54
shuric

Qt/C++ Определение положения курсора над действие(кнопкой) в QToolBar

Доброго дня. Возник вопрос - как можно определить что курсор находится над определенным действием(кнопкой) в qtoolbar ? mainwindow.cpp MainWindow::MainWi…
s
6 июня 2020 г. 0:45
shuric

Qt/C++ особенности QProxyStyle

Да, Вы правы. Код был скопирован с сайта (уже не помню с какого), но решил пойти по пути более легком. Пришлось переписать - кому интересно: использовал stackedWidget для пе…
5 июня 2020 г. 23:08
Алексей

Посоветуйте новичку (базы данных и Qt, что учить)

Блин, а я недавно купил Шлее Qt 5.10 :( С детства хотел стать программистом, баловался Паскалем, писал простенькие программки на Delphi, создавал движок на php, изучал C (забросил и перешел на п…
5 июня 2020 г. 13:09
IscanderChe

QPlainTextEdit настройка цвета фона

Вечер добрый. Пытаюсь настроить цвет фона QPlainTextEdit следующим образом: CodeEditor::CodeEditor(QWidget *parent) : QPlainTextEdit(parent){ ... QPalette::ColorRole role = bac…
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB