私は最近django 1.4に更新し、多くの問題に取り組んできました。
最新のものはアトミック操作です。
リンクをクリックすると、何らかの理由でビューが 2 回呼び出されます。これは、開発サーバーの print ステートメントによって確認されています。
例として:
def link_createNewNumber(self, request, obj=None):
print "*** createNewNumber Called ***"
number = numbers.objects.filter(id=obj)
if len(number) == 1:
print "Exists, just redirect to new page"
# ResponseRedirect here...
elif len(number) == 0:
# Code to create new entry
print "Saved new database entry"
# ResponseRedirect here...
今、私はトランザクションに出くわしました。ただし、トランザクション ミドルウェアを settings.py に追加した後でも、次のようになります。
...
'django.middleware.transaction.TransactionMiddleware',
...
@transaction.commit_on_success を関数の先頭に追加します。
@transaction.commit_on_success
def link_createNewNumber(self, request, obj=None):
...
多くの場合、次の出力が得られます(簡略化):
*** createNewNumber Called ***
*** createNewNumber Called ***
Saved new database entry
Saved new database entry
これはすべて1.2.3でうまく機能していたので、私は困惑しています。問題の核心は、リンクが選択されたときの二重実行にあるようです。