Answers:
您需要在要回滚的迁移之前弄清楚迁移的数量。
您的应用程序应该有一个迁移目录,其中的文件名为
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会按顺序运行所有新迁移。(它查看数据库表以确定哪些是“新的”)。
但是,您也可以按数字指定任何迁移,South会向前或向后迁移数据库,以达到此目的。因此,在上面的示例文件中,如果您已经迁移到0003,并且想要反向运行0003(有效地撤消它),则可以运行
./manage.py migrate your_app 0002
South将查看数据库,意识到它已经运行了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
,仅使用“状态”数字即可。在改进和测试迁移时,您可以在历史记录中同时使用这两个命令:正向(无自变量),向后带有先前的状态号。