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

hob*_*es3 7 django django-south

我改变了很多models.py,包括删除了很多字段,并重命名了几个类.schemamigration --auto工作正常,但尝试migrate抛出一堆错误.

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

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

Chr*_*att 11

是的,只需删除迁移并schemamigration --initial再次运行.在转向生产之前,您应该将其作为正常课程.如果您已经至少进行过一次生产,请不要删除所有迁移 - 只是您在当前开发周期中创建的迁移,然后运行schemamigration --auto以获得一次迁移而不是潜在的多次迁移.

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

UPDATE

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

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

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

  3. 生成新的迁移以覆盖刚刚删除的迁移.如果是新应用,请使用--initial,或者如果它是预先存在的应用,请使用--auto.

    python manage.py schemamigration --initial yourapp
    
    Run Code Online (Sandbox Code Playgroud)
  4. 迁移

    python manage.py migrate yourapp
    
    Run Code Online (Sandbox Code Playgroud)

  • 只是物理删除文件.没有命令 - 只是你删除任何东西的正常方式. (3认同)
  • 选项是`--ignore-ghost-migrations`,并在South 0.7.1中添加 (2认同)