使用Django South向后迁移

好的,所以这似乎是一个非常愚蠢的问题,我敢肯定,我错过了某个地方的东西。

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

所以我调整了我的模型,创build了一个schemamigration的迁移,通过migrate运行migrate ,现在我意识到这不是我想要的,我希望它恢复schemamigration

没有手动编辑数据库表和删除迁移文件,我应该如何回滚回迁? 我发现通过Google使用South向后迁移的参考,但还没有find一个坚实的代码示例。

谁能帮忙?

您需要确定您想要回滚之前的迁移数量。

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

 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 ./manage.py migrate your_app顺序运行所有新的迁移。 (它看着数据库表来决定哪些是新的)。

但是,您也可以指定通过编号进行的任何迁移,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

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

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