好吧,这个问题看起来很傻,我肯定我在某个地方遗漏了一些东西。

如何在Django上使用South执行向后迁移?

所以我调整了我的模型,用schemmigration创建了一个迁移,用migrate运行迁移,现在我意识到这不是我想要的,我想要它回到以前的方式。

如果不手动编辑db表和删除迁移文件,我应该如何回滚迁移呢?我找到了通过谷歌使用South的向后迁移的参考,但还没有找到一个可靠的代码示例。

有人能帮忙吗?


在参数的末尾添加一个迁移名称:

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

您需要在想要回滚的迁移之前计算出迁移的数量。

你的应用程序应该有一个迁移目录,其中的文件命名为

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

“零”是任何迁移之前的特殊状态。

参考:http://south.aeracode.org/docs/commands.html