2011-08-03 5 views
0

私はそうのように、相互に参照するモデルオブジェクトの束を作成していますを作成します保存されていないモデルオブジェクト。保存されていないため、IDはまだ設定されていないため、linkを保存するとエラーが発生します。Djangoは)モデル

すべてのオブジェクトを作成して保存するか、いずれも保存しません。これを行うための標準パターンはありますか?

私は「トランザクション性」を気にするので、これをやっています。データベースへのアクセスを最小限に抑えることは明らかに良いことですが、主な目的ではありません。

答えて

1

トランザクションを完全に制御する必要がある場合は、commit_manuallyデコレータを使用してください。これはDjangoにあなた自身でトランザクションを管理することを伝えます。

ビューがデータを変更し、commit()またはrollback()を実行しない場合、DjangoはTransactionManagementError例外を発生させます。私は、インスタンスの作成を遅らせるためにサンクに頼るように私のコードを変換するの真ん中にあった

from django.db import transaction 

@transaction.commit_manually 
def viewfunc(request): 
    ... 
    # You can commit/rollback however and whenever you want 
    transaction.commit() 
    ... 

    # But you've got to remember to do it yourself! 
    try: 
     ... 
    except: 
     transaction.rollback() 
    else: 
     transaction.commit() 
+0

マニュアルトランザクション管理は、次のようになります。私のコードは間違いなく複雑ではなく、私のコンプライアントの醜さを犠牲にしています。 – Marcin