我在一个更大的项目中使用 django south,我唯一不喜欢它的是,你不能一次为所有应用程序创建模式迁移(我有很多应用程序继承自同一个抽象模型,如果我更改该基本模型,则有很多要迁移的应用程序)-认为您实际上可以一次迁移所有应用程序(使用 migrate --all )。
所以我想知道 django south 是否有一个简单的解决方案可以同时处理一堆应用程序,或者是否有人有一个很好的脚本可以这样做?
我在一个更大的项目中使用 django south,我唯一不喜欢它的是,你不能一次为所有应用程序创建模式迁移(我有很多应用程序继承自同一个抽象模型,如果我更改该基本模型,则有很多要迁移的应用程序)-认为您实际上可以一次迁移所有应用程序(使用 migrate --all )。
所以我想知道 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)
然后使用 fab 迁移调用它
这不是您问题的完全答案,但可能会有所帮助,具体取决于您正在尝试做什么。
您可以将迁移定义为取决于来自其他应用程序的迁移。例如:
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
可以为上面的功能做类似的事情。