0

Excelシートを読み取ってデータを保存するビューがあります。そのビューでエラーが発生した場合(500)、データベーストランザクションはコミットされないため、ロールバックする必要があります。

次のコードを使用しますが、エラーが発生する前にデータを保存します。私のタスクは、データベースがロールバックする必要があるビューにエラーがある場合です。

django.dbインポートトランザクションから

@transaction.commit_on_success def upload_data(request): ..... など .....
obj.save()

この行にエラーが表示されます このビューが obj1.save() と呼ばれる前のようにデータベースをロールバックしたい エラーがここにある場合は、保存する必要があります。ありがとう

4

2 に答える 2

0

Djangoのトランザクションに関するドキュメントによると、Django 1.6 を使用している場合は、ビュー全体を次のようにラップします@transaction.atomic

from django.db import transaction

@transaction.atomic

アプリ全体でこの動作が必要な場合ATOMIC_REQUESTS=Trueは、そのドキュメントで説明されているように、データベース構成で設定します。

それ以外の場合、1.5 を使用していて期待どおりの動作が得られない場合は、 に切り替えて、ビュー全体をブロックで@transaction.commit_manuallyラップし、 orを明示的に実行できます。エレガントではありませんが、コミットがいつ行われるかを細かく制御したい場合はうまくいくかもしれません。trycommit()rollback()

于 2013-10-31T17:17:09.940 に答える
0

ビューのすぐ上に @transaction.commit_on_success を配置してみてください。したがって、そのビュー関数内でエラーが発生した場合、ロールバックするか、作業をコミットします。

于 2014-01-21T19:41:08.227 に答える