首页 文章

与Django South向后迁移

提问于
浏览
212

好的,所以这似乎是一个非常愚蠢的问题,而且我确定我在某处遗漏了某些东西 .

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

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

如果没有手动编辑数据库表并删除迁移文件,我应该如何进行迁移?我通过Google找到了使用South的向后迁移的参考,但还没有找到一个可靠的代码示例 .

有人可以帮忙吗?

3 回答

  • 3

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

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

    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会按顺序运行所有新迁移 . (它查看数据库表以确定哪些是'new') .

    但是,您也可以按编号指定任何迁移,South将向前或向后迁移数据库以使其达到该点 . 因此,使用上面的示例文件,如果您已经迁移到0003,并且您想要反向运行0003(有效地撤消它),那么您将运行

    ./manage.py migrate your_app 0002
    

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

  • 332

    以防有人(像我一样)想知道如何 migrate back from initial (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

  • 216

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

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

相关问题