Подтвердить что ты не робот

Django 1.7 migrations - как очистить все миграции и начать с нуля?

Итак, я быстро итерации в приложении django на данный момент, и я постоянно настраиваю models.py. В течение дня или двух из программирования и тестирования я создаю пару десятков файлов миграции. Иногда я действительно разрываю схему и полностью переделываю ее. Это заставляет процесс миграции много жаловаться на значения по умолчанию и нулевые значения и так далее. Если возможно, я просто хотел бы поцарапать все материалы миграции и снова запустить миграцию, чтобы наконец узнать, что я делаю. До сих пор мой подход заключался в следующем:

  • удалить все в папке миграции, кроме __init__.py.
  • зайдите в мою консоль PostgreSQL и выполните: DELETE FROM south_migrationhistory WHERE app_name='my_app';
  • а на консоли PostgreSQL удалите все таблицы, связанные с my_app.
  • re-run ./manage.py makemigrations my_app - это создает файл 0001_initial.py в моей папке переноса.
  • run ./manage migrate my_app - Я ожидаю, что эта команда заново построит все мои таблицы, но вместо этого она говорит: "Никаких миграций для применения".

Что дает?

Кроме того, теперь находится таблица таблиц south_migrationhistory, которую я сбросил на Юг и переключился на Django 1.7?

Спасибо.

4b9b3361

Ответ 1

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

Команда: DELETE FROM django_migrations WHERE app='my_app'

Как только это будет сделано, вы сможете перезапустить свои миграции с нуля.

Ответ 2

Я просто хотел поместить все шаги в командный формат:

ПРИМЕЧАНИЕ. Приведенные ниже команды довольно разрушительны, это означает start from scratch, как запросил OP.

После комментария от mikeb я подумал добавить эту строку:

PRE - ПРОВЕРЬТЕ, ЧТО ФАЙЛЫ ВЫ УДАЛИТЬ

find . -path *migrations* -name "*.py" -not -path "*__init__*"

Затем отрегулируйте команду на шаге 1 до той, которая работает для вашей среды dev.

  • удалить все миграции из всех приложений:
find . -path *migrations* -name "*.py" -not -path "*__init__*" -exec rm {} \; # make sure to be in your projects path
  1. воссоздайте всю базу данных:
sudo -u postgres bash -c "psql -c \"DROP DATABASE rootedin;\""
sudo -u postgres bash -c "psql -c \"CREATE DATABASE rootedin;\""
sudo -u postgres bash -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE rootedin to vagrant;\"" # vagrant is my current user
  1. обновите свой db:
python3 manage.py makemigrations
python3 manage.py migrate