好的,所以这似乎是一个非常愚蠢的问题,而且我确定我在某处遗漏了某些东西。
如何在Django上使用South执行向后迁移?
所以我调整了我的模型,用schemamigration
创建了一个迁移,用migrate
运行迁移,现在我意识到这不是我想要的,我想要它回到以前的路上。
如果没有手动编辑数据库表并删除迁移文件,我该怎么办呢?我找到了使用South通过谷歌进行向后迁移的参考,但还没有找到一个可靠的代码示例。
有人可以帮忙吗?
答案 0 :(得分:334)
您需要在之前计算要回滚的之前的迁移次数。
您的应用应该有一个迁移目录,其中的文件名为
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。
答案 1 :(得分:217)
以防有人(像我一样)想知道如何从初始(0001)迁移回来:
django-admin.py migrate some_app zero
输出:
Running migrations for some_app:
- Migrating backwards to zero state.
< some_app:0001_initial
“零”是任何迁移之前的特殊状态。
答案 2 :(得分:3)
在参数末尾添加迁移名称:
./manage.py migrate app-name 00xx-migration-name