【问题标题】:Django South: Creating schemamigration for more than one appDjango South:为多个应用程序创建架构迁移
【发布时间】:2011-03-11 03:00:56
【问题描述】:

我在一个更大的项目中使用 django south,我唯一不喜欢的是,你不能同时为所有应用创建架构迁移(我有很多应用继承自相同的抽象模型,如果我更改该基本模型,则有很多要迁移的应用程序)-认为您实际上可以一次迁移所有应用程序(使用 migrate --all )。

所以我想知道 django south 是否有一个简单的解决方案可以同时处理一堆应用程序,或者是否有人准备好一个不错的脚本来执行此操作?

【问题讨论】:

    标签: database django migration django-apps django-south


    【解决方案1】:

    第一件事:单独的应用程序应该限制模型交互

    既然说了,让我们接受约束。没有南方不能为许多应用程序创建一个迁移文件,我不知道如何在单个 manage.py 命令中为许多应用程序生成多个迁移。

    现在剩下的就是一个脚本。您可以使用神奇的结构 http://docs.fabfile.org/ 来生成您的迁移:

    APPS_TO_WATCH = ['myapp','myotherapp','toomanyapps']
    def migration():
        for app in APPS_TO_WATCH:
            local('python manage.py schemamigration %s --auto' % app)
    

    然后使用 晶圆厂迁移

    【讨论】:

    • 是的好主意。已经使用织物,也将使用它!我的问题更多源于我需要向基本 django 模型添加一些功能并在几个应用程序中重用此功能;所以我猜这是唯一的可能!
    【解决方案2】:

    这不是您问题的完全答案,但可能会有所帮助,具体取决于您要做什么。

    您可以将迁移定义为取决于来自其他应用的迁移。例如:

    class Migration(SchemaMigration):
        depends_on = (
            ("other_app", "0001_initial"),
        )
    

    这将确保所有必需的先决条件迁移都已在您之前运行。

    【讨论】:

      【解决方案3】:

      除了上面的结构答案,将其添加到您的 fabfile.py:

      from myproj.settings import INSTALLED_APPS
      
      def initmigration():
          for app in INSTALLED_APPS:
              if 0 == app.find('myproj.'):
                  _app = app.split('myproj.')[1]
                  local('python manage.py convert_to_south %s' % _app)
      

      现在运行fabric initmigration。可以对上面的migration 函数做类似的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-23
        • 2014-08-01
        • 2012-03-03
        • 1970-01-01
        • 2012-04-26
        • 2019-06-19
        • 1970-01-01
        • 2014-08-11
        相关资源
        最近更新 更多