1

私は最近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でうまく機能していたので、私は困惑しています。問題の核心は、リンクが選択されたときの二重実行にあるようです。

4

0 に答える 0