Обратная миграция с Джанго Югом - PullRequest
215 голосов
/ 28 апреля 2011

Хорошо, это очень глупо, и я уверен, что где-то что-то упустил.

Как вы выполняете обратную миграцию с использованием South на Django?

Итак, я настроил свои модели, создал миграцию с schemamigration, запустил миграцию с migrate, и теперь я понимаю, что это не совсем то, что я хотел, и я хочу вернуть ее назад, как раньше.

Если не считать ручного редактирования таблиц БД и удаления файлов миграции, как мне откатить миграцию обратно?Я нахожу ссылки на обратную миграцию с использованием South через Google, но мне еще не удалось найти надежный пример кода.

Кто-нибудь может помочь?

Ответы [ 3 ]

334 голосов
/ 28 апреля 2011

Вам нужно выяснить номер миграции непосредственно перед той, которую вы хотите откатить.

В вашем приложении должен быть каталог миграций, в котором файлы должны называться как

0000_initial.py
0001_added_some_fields.py
0002_added_some_more_fields.py
0003_deleted_some_stuff.py

Обычно, когда вы запускаете ./manage.py migrate your_app, Юг запускает все новые миграции по порядку.(Он просматривает таблицы базы данных, чтобы определить, какие из них являются «новыми»).

Однако вы также можете указать любую миграцию по номеру, и Юг перенесет вашу базу данных, вперед или назад , чтобы довести это до этого момента.Итак, с примерами файлов выше, если вы уже мигрировали до 0003, и вы хотели запустить 0003 в обратном порядке (отменить его, эффективно), вы бы запустили

./manage.py migrate your_app 0002

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

217 голосов
/ 06 апреля 2012

На всякий случай, если кто-то (например, я) задается вопросом, как мигрировать обратно с начального (0001) :

django-admin.py migrate some_app zero

выход:

Running migrations for some_app:
 - Migrating backwards to zero state.
 < some_app:0001_initial

"ноль"это особое состояние перед любой миграцией.

Ссылка: http://south.aeracode.org/docs/commands.html

3 голосов
/ 28 апреля 2011

Добавить имя миграции в конце параметров:

./manage.py migrate app-name 00xx-migration-name
...