我的模型中有一个方法,可以增加 Django 对象的字段并返回值,但我无法在不获取重复值的情况下异步调用此方法。我读过有关 transaction.atomic 的 Django 文档,但我使用的是 Django 1.3,为什么我不能使用它。
该方法如下所示:
def incr_and_return_val(self):
obj = Obj.objects.filter(pk=self.id)
obj.update(val=F('val') + 1)
return obj.val
我该怎么做才能确保此方法始终返回唯一的值。
谢谢,马蒂亚斯
最佳答案
使用 transaction.commit_on_success
装饰您的函数
from django.db import transaction
@transaction.commit_on_success
def incr_and_return_val(self):
Django 1.3(以及更新版本)中的事务与请求范围相关,因此当创建请求时事务开始,当请求结束(返回响应)时事务被提交并关闭。如果请求期间出现任何异常,则事务将回滚。
使用此装饰器,您可以为此函数创建新事务,该事务将在成功调用后提交。
关于python - 异步递增并返回 Django 1.3 对象的字段并确保唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25283208/