如何从南方(Django)“转换”应用程序?

时间:2012-03-12 16:18:09

标签: django django-south

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

我的所有代码目前都在开发中,所以我不介意丢失太多数据。所以我希望南方“不转发”或“取消管理”一个应用程序,这样我就可以再次使用syncdb重建所有表格。

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

1 个答案:

答案 0 :(得分:11)

是的,只需删除迁移并再次运行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
    
相关问题