python - 异步递增并返回 Django 1.3 对象的字段并确保唯一性

标签 python mysql django

我的模型中有一个方法,可以增加 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/

相关文章:

php - 如果文件上传部分为空,如何使代码继续该过程 PHP MYSQLi

python - SQLAlchemy:如何根据多个键自动递增?

php - 选择某商品一个月内的最后一笔交易

python - Django 模型 - 如何取消 on_delete=models.CASCADE

django - 如何在 uWSGI 下分析 Django 应用程序?

python - 带有seaborn clustermap的下三角掩码

python - 添加多个身份验证处理程序以请求调用

python - 安装 matplotlib 错误 : Command errored out with exit status -4

python - 如何使 Django 中传递参数的 url 起作用?

python - 使用 Twisted (python) 为 UDP 套接字设置超时