我在一个更大的项目上使用django south,我不喜欢它,唯一不能为所有应用程序同时创建模式迁移(我有很多从同一个抽象模型继承的应用程序,如果我更改了基本模型,有很多应用程序需要迁移) - 以为你可以一次迁移所有的应用程序(使用migrate --all)。Django South:为多个应用程序创建模式迁移
所以我想知道是否一个简单的解决方案为Django南一次处理一堆应用程序,或者如果有人有一个很好的脚本准备好做到这一点?
我在一个更大的项目上使用django south,我不喜欢它,唯一不能为所有应用程序同时创建模式迁移(我有很多从同一个抽象模型继承的应用程序,如果我更改了基本模型,有很多应用程序需要迁移) - 以为你可以一次迁移所有的应用程序(使用migrate --all)。Django South:为多个应用程序创建模式迁移
所以我想知道是否一个简单的解决方案为Django南一次处理一堆应用程序,或者如果有人有一个很好的脚本准备好做到这一点?
第一件事:单独的应用程序应该限制模型的相互作用
现在,它的说,让我们拥抱约束。没有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)
,然后使用 晶圆厂迁移
这是不大的回答你的问题调用它,但可能助阵具体取决于你想要做什么。
您可以将迁移定义为取决于来自其他应用程序的迁移。例如:
class Migration(SchemaMigration):
depends_on = (
("other_app", "0001_initial"),
)
这将确保所有必需的先决条件迁移已在您的之前运行。
的除了面料回答上面,添加到您的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
函数做类似的事情。
是个好主意。已经在使用织物,也将使用它! 我的问题来自于我需要添加一些功能到基本的django模型,并在几个应用中重用这个功能的问题;所以这是唯一的可能性,我猜! – 2010-07-02 15:54:49
这个答案的第一行半是我的upvote – lajarre 2014-06-17 15:34:35