Django South: создание схемы миграции для нескольких приложений - PullRequest
2 голосов
/ 02 июля 2010

Я использую django south в более крупном проекте, единственное, что мне не нравится в нем, это то, что вы не можете создавать схемы миграций для всех ваших приложений одновременно (у меня есть много приложений, которые наследуются от та же абстрактная модель, если я изменю эту базовую модель, есть множество приложений для миграции) - думал, что вы можете фактически перенести все из них одновременно (используя migrate --all).

Итак, я хотел бы знать, есть ли для django south простое решение для одновременной работы с несколькими приложениями или у кого-нибудь есть хороший сценарий, готовый для этого?

Ответы [ 3 ]

9 голосов
/ 02 июля 2010

Первое: отдельные приложения должны ограничивать взаимодействие моделей

теперь, когда сказано, давайте примем ограничение.Ни один юг не может создать один файл миграции для многих приложений, и я не знаю, как создать много миграций для многих приложений с помощью одной команды 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)

, а затем вызывать ее с помощью потрясающей миграции

3 голосов
/ 04 июля 2010

Это не совсем ответ на ваш вопрос, но может помочь в зависимости от того, что именно вы пытаетесь сделать.

Вы можете определить миграции в зависимости от миграции из других приложений.Например:

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

Это обеспечит выполнение всех необходимых предварительных миграций перед вашей.

1 голос
/ 28 ноября 2011

В дополнение к ответу ткани выше, добавьте это к вашему 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 выше.

...