我最近更新到 django 1.4 并且一直在解决一些问题。
最近的是原子操作。
由于某种原因,当单击链接时,视图会被调用两次。这已通过开发服务器上的打印语句验证。
举个例子:
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 中正常工作。问题的核心似乎是选择链接时的双重执行。