Django South:为多个应用程序创建模式迁移

时间:2010-07-02 13:51:43

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

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

所以我想知道这是一个简单的解决方案,让django南一次处理一堆应用程序,或者是否有人有一个很好的脚本可以做到这一点?

3 个答案:

答案 0 :(得分:9)

首先:单独的应用程序应限制模型交互

现在已经说过了,让我们接受这个约束。没有南方无法为许多应用程序创建单个迁移文件,我不知道如何在单个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)

然后使用它来调用它     工厂迁移

答案 1 :(得分:3)

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

您可以根据其他应用的迁移定义迁移。例如:

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

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

答案 2 :(得分:1)

添加上面的结构答案,将其添加到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函数执行类似的操作。