Обратная миграция с Django South
Хорошо, так что это кажется действительно глупым вопросом, и я уверен, что где-то там что-то не хватает.
Как вы выполняете обратную миграцию с помощью юга на Django?
Итак, я изменил свои модели, создал миграцию с помощью schemamigration
, запустил миграцию с помощью migrate
, и теперь я понимаю, что не совсем то, что я хотел, и я хочу, чтобы это было раньше.
Не удалось вручную отредактировать таблицы db и удалить файлы миграции, как мне перейти к переносу миграции? Я нахожу ссылки на обратные миграции с помощью юга через Google, но пока не нашел для него прочного кода.
Может ли кто-нибудь помочь?
Ответы
Ответ 1
Вам нужно выяснить количество миграции перед тем, который вы хотите отменить.
В вашем приложении должен быть каталог миграции, с файлами в нем с именем
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.
Ответ 2
На всякий случай кто-то (как и я) задавался вопросом, как выполнить миграцию из начального (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
Добавить имя миграции в конце параметров:
./manage.py migrate app-name 00xx-migration-name