2009-06-14 1 views
4

デフォルトでは、django管理サイト内のすべての更新はトランザクションとして行われることに気付きました。Django admin:DBトランザクションをオフにする

私はどちらかを行う必要があります。 - 取引(グローバルまたは特定の管理ビュー用) をオフにする - 管理インタフェースを介して保存されているエンティティの保存()メソッドの内部で、トランザクションをコミット

理由は私がsave()メソッドをオーバーライドし、ちょうど起こった変更について外部の非djangoシステムに通知しているということです。ただし、djangoはまだトランザクションをコミットしていないので、外部システムは更新を認識しません。

誰でもこれを達成するための提案はありますか?

+1

グレート質問かもしれません。これはDjangoの管理者の競合状態の一般的な原因であり、Djangoがトランザクション内でトランザクションを使用していることを認識していない場合は、非常に不満な問題になります。 – Cerin

+0

私たちはhttps://pypi.python.org/pypi/django-celery-transactionsで多くの成功を収めました。これが行うことは、バックグラウンドタスクが開始されたときに実行されているトランザクションが、タスクの実行を許可する前に完了していることを確認することです –

答えて

5

あなたは、特定のビュー/関数の中でトランザクションの完全な制御を取得するためにcommit_manuallyを使用することができます。それは外部のプロセスが更新を「見る」ことができない理由本当の理由だから

0

よりよい解決策は...、あなたのデータベースのトランザクション分離の設定を調査する

関連する問題