gpt4 book ai didi

python - 保存方法中的django回滚事务

转载 作者:太空狗 更新时间:2023-10-30 00:42:03 26 4
gpt4 key购买 nike

我有以下代码覆盖模型的保存方法:

@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 递增 1,但如果在 super(self) save 方法中发生任何异常,事务回滚(这意味着 self.qa.vote_down_count += 1 未提交在数据库中)。

实际行为是:self.qa.vote_down_count += 1 被提交到数据库,即使 IntegrityError 异常从 super(self) 保存引发也是如此。

有什么想法吗?

最佳答案

为什么不简单地做:

@transaction.commit_manually
def save(self, *args, **kwargs):
try:
super(self.__class__, self).save(*args, **kwargs)
self.qa.vote_down_count += 1
self.qa.save()
except:
transaction.rollback()
raise
else:
transaction.commit()

这就是the docs暗示这样做,虽然他们说在你的 View 函数中这样做,所以你可能不需要 save() 方法上的 @transaction.commit_manually,而是把它在 View 上。

关于python - 保存方法中的django回滚事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3174694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com