我最近更新了django 1.4并且已经解决了很多问题。
最近的是原子操作。
出于某种原因,单击链接时,视图会被调用两次。这已由开发服务器上的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一起工作。当选择链接时,问题的核心似乎是双重执行。