2

私はより大きなプロジェクトでdjangosouthを使用していますが、それについて私が気に入らないのは、すべてのアプリのスキーマ移行を一度に作成できないことです(同じ抽象モデルから継承するアプリがたくさんあります) 、その基本モデルを変更すると、移行するアプリがたくさんあります)-実際にはすべてを一度に移行できると思いました(migrate --allを使用)。

だから私は、django southが一度にたくさんのアプリを処理するための簡単な解決策があるかどうか、または誰かがそれを行う準備ができている素晴らしいスクリプトを持っているかどうか知りたいですか?

4

3 に答える 3

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)

次に、ファブ移行を使用して呼び出します

于 2010-07-02T14:57:10.513 に答える
3

これはあなたの質問に対する完全な答えではありませんが、あなたが何をしようとしているのかによっては役立つかもしれません。

他のアプリからの移行に応じて移行を定義できます。例えば:

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

これにより、必要なすべての前提条件の移行が事前に実行されていることが保証されます。

于 2010-07-04T08:20:24.943 に答える
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 initmigrationmigration上記の関数に対して同様のことを行うことができます。

于 2011-11-28T09:59:45.433 に答える