【问题标题】:How do I "unconvert" an app from South (Django)?如何“取消转换”来自 South (Django) 的应用程序?
【发布时间】:2012-03-29 01:41:34
【问题描述】:

我在models.py 中进行了很多更改,包括删除了很多字段,并重命名了几个类。 schemamigration --auto 工作正常,但尝试 migrate 会引发一堆错误。

我所有的代码目前都在开发中,所以我不介意丢失太多数据。因此,我希望 South “取消转换”或“取消管理”应用程序,以便我可以再次使用 syncdb 重建所有表。

或者我可以删除所有迁移列表并再次执行schemamigration --initial

【问题讨论】:

    标签: django django-south


    【解决方案1】:

    是的,只需删除迁移并再次运行 schemamigration --initial。在开始生产之前,您无论如何都应该按照正常过程执行此操作。如果您至少已经投入生产一次,请不要删除所有迁移 - 只删除您在当前开发周期中创建的迁移,然后运行 ​​schemamigration --auto 以获得一个迁移而不是潜在的多个迁移.

    FWIW,要使用 South“取消转换”应用程序,您只需删除“迁移”目录,但在这种情况下,没有必要。

    更新

    有人指出,如果您已经迁移了您的应用程序,并且您删除了所有迁移并生成一个新的迁移,South 会抱怨迁移仍在数据库中。您应该遵循的实际过程是:

    1. 回滚到您在当前开发周期中创建的最新迁移之前的位置。例如,如果您已经在 0005 并且您为正在进行的开发工作创建了三个新迁移(现在在 0008),您将回滚到 0005。如果所有迁移都是新的,您将回滚到 zero:

      python manage.py migrate yourapp zero
      
    2. 删除所有要合并的迁移。在上面的示例中,这将是 0006、0007 和 0008,或者对于新应用程序,迁移目录中的所有内容,但 __init__.py

    3. 生成新的迁移以覆盖您刚刚删除的迁移。如果是新应用,请使用--initial,如果是已存在的应用,请使用--auto

      python manage.py schemamigration --initial yourapp
      
    4. 迁移

      python manage.py migrate yourapp
      

    【讨论】:

    • 好的,谢谢你的解释。删除迁移的代码是什么?
    • 只是物理删除文件。没有命令 - 只是删除任何内容的正常方式。
    • 其实如果你删除了文件,South会警告说虽然文件没有了,但数据库中仍然存在迁移信息。然后有这个选项可以摆脱“幽灵”文件或其他东西。我忘记了命令,但它也会从数据库中删除信息。
    • 选项为--ignore-ghost-migrations,在南0.7.1添加
    • 抱歉,是的,我假设您从空白数据库开始,因为您在迁移时遇到问题。在开发中,最好先回滚,删除迁移,生成新的单个迁移,然后迁移。我会更新我的答案。
    猜你喜欢
    • 2011-02-14
    • 2015-03-29
    • 2018-03-19
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2013-06-23
    相关资源
    最近更新 更多