Благодаря ответам Доминика Гвардиолы и Хобса, это помогло мне решить сложную проблему.Однако есть несколько проблем с решением, вот мое решение.
Использование manage.py reset south
- - не очень хорошая идея , если у вас есть сторонние приложения , который использует Юг, например django-cms
(в основном все использует Юг).
reset south
удалит всю историю миграции для всех установленных вами приложений.
Теперь учтите, что выобновите до последней версии django-cms
, она будет содержать новые миграции, такие как 0009_do_something.py
.Юг наверняка будет сбит с толку, когда вы попытаетесь запустить эту миграцию, не имея 0001
- 0008
в истории миграции.
Гораздо лучше / безопаснее выборочно сбрасывать только те приложения, которые у вас естьподдержание .
Прежде всего, убедитесь, что ваши приложения не имеют рассинхронизации между миграциями на диске и миграциями, которые были выполнены в базе данных.В противном случае будет головная боль.
1.Удалить историю миграции для моих приложений
sql> delete from south_migrationhistory where app_name = 'my_app';
2.Удалить миграции для моих приложений
$ rm -rf my_app/migrations/
3.Создать новые начальные миграции для моих приложений
$ ./manage.py schemamigration --initial my_app
4.Поддельное выполнение начальных миграций для моих приложений
Это вставляет миграции в south_migrationhistory
, не затрагивая реальные таблицы:
$ ./manage.py migrate --fake my_app
Шаг 3 и 4 на самом деле является просто более длинным вариантом manage.py convert_to_south my_app
, но я предпочитаю этот дополнительный контроль в такой деликатной ситуации, как изменение производственной базы данных.