与Django South向后迁移

Backwards migration with Django South

好吧,所以这似乎是一个很愚蠢的问题,我肯定我错过了什么。

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

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

除了手动编辑数据库表和删除迁移文件之外,我应该如何回滚迁移?我通过google找到了对使用south进行向后迁移的引用,但还没有找到一个可靠的代码示例。

有人能帮忙吗?


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

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

1
2
3
4
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(有效地撤消它),那么您将运行

1
./manage.py migrate your_app 0002

South会查看数据库,意识到它已经运行了0003,并确定它必须运行0003的反向迁移才能返回到0002。


以防有人(像我)想知道如何从初始位置(0001)迁移回来:

1
django-admin.py migrate some_app zero

输出:

1
2
3
Running migrations for some_app:
 - Migrating backwards to zero state.
 < some_app:0001_initial

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

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


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

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