2010-07-02 91 views
2

我在一个更大的项目上使用django south,我不喜欢它,唯一不能为所有应用程序同时创建模式迁移(我有很多从同一个抽象模型继承的应用程序,如果我更改了基本模型,有很多应用程序需要迁移) - 以为你可以一次迁移所有的应用程序(使用migrate --all)。Django South:为多个应用程序创建模式迁移

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

回答

9

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

现在,它的说,让我们拥抱约束。没有south不能为许多应用程序创建单个迁移文件,我不知道如何在单个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) 

,然后使用 晶圆厂迁移

+0

是个好主意。已经在使用织物,也将使用它! 我的问题来自于我需要添加一些功能到基本的django模型,并在几个应用中重用这个功能的问题;所以这是唯一的可能性,我猜! – 2010-07-02 15:54:49

+1

这个答案的第一行半是我的upvote – lajarre 2014-06-17 15:34:35

3

这是不大的回答你的问题调用它,但可能助阵具体取决于你想要做什么。

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

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

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

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函数做类似的事情。

相关问题