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