我已在下面的代码段重写保存的模型的方法,包括:django的回滚事务
@transaction.commit_on_success
def save(self, *args, **kwargs):
try:
transaction.commit()
self.qa.vote_down_count += 1
self.qa.save()
super(self.__class__, self).save(*args, **kwargs)
except:
transaction.rollback()
raise
else:
transaction.commit()
预期的行为将是:self.qa属性vote_down_count递增一,但是,如果任何在super(self)save方法中发生异常事务回滚(这意味着self.qa.vote_down_count + = 1不会在数据库中提交)。
实际的行为是:self.qa.vote_down_count + = 1被提交到数据库,即使IntegrityError异常从超级(自我)保存引发。
任何虽然?
你为什么犯第一件事情,然后在结束时再次犯下? – 2010-07-04 12:49:56
提交第一件事就是打开交易,确保提交之前发生的所有事情,不是吗? – 2010-07-04 12:57:35
这将严重依赖于你正在使用的数据库Postgres 8.0+和Oracle支持正确的事务处理MySQL不会与它们很好地协作,而大多数其他数据库根本不支持它们。所以问题之一是“你的数据库实际上是否支持交易?” – 2010-07-04 18:53:10