2012-02-03 11 views
0
以下

は私が達成しようとしているものの例を簡略化されていますエラー。私はまた、djangoのInlineForm(管理者側)の仕組みを理解しようとしましたが、主なProductを最初に保存し、次にProductAttributeValueを保存しているようですが、ProductAttributeValueの保存に失敗した場合は問題ありません。 私の場合は受け入れられません。つまり、すべてのフォーム(商品と値の両方)を保存するか、失敗してください。私は確かにコミット=真の最初から保存することができますが、私が言ったように、私は製品が保存され、価値がない場合を望んでいません。手動で保存するのModelForm相対外部キー

助けてください。

+0

もちろん、未保存のインスタンスを保存していない別のインスタンスに追加することはできません。 'save()'を呼び出して属性を代入すると何が問題になりますか?何とか失敗すると思いますか?あなたがそうした場合、取引に関する以下の回答があります。私はちょうどあなたがここで失敗を期待しているのか不思議です。データベースレベルで失敗しないことを確認するためには、事前に検証を行うべきです。 –

答えて

1

参照:https://docs.djangoproject.com/en/dev/topics/db/transactions/ 手動取引を使用してこれを行うことができます。最初の保存をコミットし、2番目が失敗した場合はロールバックします。

@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

答えをありがとう!私は他の解決策があるかどうかを知りたいと思っていました。私はすでにいくつかの場所でtransaction.commit_on_successを使用しています。私は手動ロールバック/コミットの呼び出しを避けることができると思います。 – user1039384

0

保存するまでIDが生成されないため、商品の前に属性を保存することはできません。いずれにしても、他の製品の前に保存する必要があります。何らかの理由でProductAttributeValuesを保存できない場合は、まずProductを保存してから属性を保存し、Productを削除するロジックを追加してください。なぜなら、検証はすでにクリーンで行われているはずだから、なぜなら、ProductAttributeValuesでセーブが失敗する理由はわかりません。

関連する問題