Евгений Легоцкой28 апреля 2019 г. 9:36

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

Содержание

В процессе разработки проекта на 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

Комментарии

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

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

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

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

Посмотреть Хостинг
T

C++ - Тест 003. Условия и циклы

  • Результат:57баллов,
  • Очки рейтинга-2
TG

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

  • Результат:53баллов,
  • Очки рейтинга-4
TG

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

  • Результат:60баллов,
  • Очки рейтинга-1
Последние комментарии
t
  • t1m4
  • 23 января 2021 г. 8:28

Django - Урок 052. Переопределение модели пользователя

Добрый день, Я вот написал в admin.py admin.site.register(User, UserAdmin) Но у меня не появилось новые поля в админке?

Django - Урок 001. Развёртывание сайта на Django + PostgreSQL + Gunicorn + Nginx

Ошибка в конфиге инжинкса про статику в root последний слеш лишний путь в таком виде получается /home/user/myprojectenv/myproject/myproject//static

Qt/C++ - Урок 061. Добавление изображений в приложение методом Drag And Drop из файлового менеджера

// Вместо отрисовки иконки и текста будем отрисовывать только одно изображение // с небольшими отступами в 5 пикселей QPixmap pix(m_model->data(index).toString()); …
m
  • magrif
  • 19 января 2021 г. 12:37

Qt Сертификация

Здравствуйте. Подскажите, оплачивать ваучер прямо в выбранном тестовом центре? Можно ли загранник предъявить? Или свой паспорт, а заполнить транслитом? А то там пишут: Your name must exactl…
r
  • retmas
  • 17 января 2021 г. 4:09

Qt/C++ - Урок 074. Генерация псевдослучайных чисел с использованием случайной библиотеки STD

Дмитрий, решает. Просто автор, видимо, не сильно озаботился изучением документации QRandomGenerator. Да и в листинге с использованием qrand вызов функции qsrand на каждой итерации цикла нав…
Сейчас обсуждают на форуме
p

QScrollArea dynamically add QCheckBoxes

онлайн казино Пин Ап официальный сайт играть на деньги или бесплатно без регистрации
p

Как поменять шаг оси с числового формата на текстовый

онлайн казино Пин Ап официальный сайт играть на деньги или бесплатно без регистрации
S

Добавление данных в модель из textEdit

Котов писать жалко, да что поделать - приходится) Вот мне пока не шибко понятно как именно при внесении новых данных обновлять модель, как мне заставить TableView отображать обновленные дан…
ИП
T

AbstractListModel использование в нескольких элементах

Разобрался. Извиняюсь за беспокойство. Я просто не поставил "model." перед переменными. Делаю рефакторинг под abstractModel, раньше модель была в QML и как то прокатывала без этого. На железе уж…
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB