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

Ind*_*pta 23 python django django-queryset

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

ob = MyModel.objects.select_for_update().filter(some conditions)
Run Code Online (Sandbox Code Playgroud)

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

Yuj*_*ita 32

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

ob = MyModel.objects.select_for_update().get(pk=1)
Run Code Online (Sandbox Code Playgroud)

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


Omi*_*aha 22

可以同时使用select_for_updateget_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
Run Code Online (Sandbox Code Playgroud)