Обратная миграция с юга Джанго


Хорошо, это кажется очень глупым вопросом, и я уверен, что где-то что-то упускаю.

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

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

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

Может ли кто-нибудь помочь?

3 212

3 ответа:

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

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

0000_initial.py
0001_added_some_fields.py
0002_added_some_more_fields.py
0003_deleted_some_stuff.py
Обычно, когда вы запускаете ./manage.py migrate your_app, Юг запускает все новые миграции, по порядку. (Он смотрит на таблицы базы данных, чтобы решить, какие из них являются "новыми").

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

./manage.py migrate your_app 0002

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

Просто на случай, если кто-то (например, я) задастся вопросом, как мигрировать обратно из начальной версии (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

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

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