如何使用select_for_update在Django中“获取”查询?

时间:2013-06-18 01:55:38

标签: python django django-queryset

正如Django文档所说,select_for_update返回Queryset。但get没有。现在我有一个查询,我相信它只会返回一个元组。但我还需要获取此事务的锁。所以我正在做类似的事情:

ob = MyModel.objects.select_for_update().filter(some conditions)

现在我需要修改ob的一些值。但ob是Queryset。这看起来很简单,但打败了我。我对Django很新。请一些建议。

2 个答案:

答案 0 :(得分:23)

只需致电get,切片等,然后像往常一样保存。通过交易锁定到位。

ob = MyModel.objects.select_for_update().get(pk=1)

任何更改都在事务结束时提交(默认情况下,每个请求为1.5)

答案 1 :(得分:16)

can您还select_for_update使用get_object_or_404功能:

from django.db import transaction
from django.shortcuts import get_object_or_404

with transaction.atomic():
    obj = get_object_or_404(MyModel.objects.select_for_update(), pk=pk)
    # do some stuff with locked obj