正如 Django 文档所说,select_for_update
返回一个Queryset
. 但get
没有。现在我有一个查询,我确信它只会返回一个元组。但我还需要为此事务获取锁。所以我正在做类似的事情:
ob = MyModel.objects.select_for_update().filter(some conditions)
现在我需要修改ob
. 但是ob
是一个Queryset
。这看起来很简单,但打败了我。我对 Django 很陌生。请给点建议。
正如 Django 文档所说,select_for_update
返回一个Queryset
. 但get
没有。现在我有一个查询,我确信它只会返回一个元组。但我还需要为此事务获取锁。所以我正在做类似的事情:
ob = MyModel.objects.select_for_update().filter(some conditions)
现在我需要修改ob
. 但是ob
是一个Queryset
。这看起来很简单,但打败了我。我对 Django 很陌生。请给点建议。
只需调用get
、切片等并照常保存。锁通过事务到位。
ob = MyModel.objects.select_for_update().get(pk=1)
任何更改都在事务结束时提交(默认情况下,通过 1.5 是每个请求)
您还可以使用select_for_update
withget_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