python - tablas - ¿Cómo usar select_for_update para ''obtener'' una consulta en Django?
link en django (2)
Como dice la documentación de Django, select_for_update
devuelve un Queryset
. Pero get
no lo hace. Ahora tengo una consulta que estoy seguro de que va a devolver sólo una tupla. Pero también necesito adquirir bloqueos para esta transacción. Entonces estoy haciendo algo como:
ob = MyModel.objects.select_for_update().filter(some conditions)
Ahora necesito modificar algunos valores de ob. Pero ob es un Queryset
. Esto parece bastante simple, pero me supera. Soy bastante nuevo para Django. Algunos consejos por favor.
Simplemente llame a get
, córtelo, etc. y guárdelo como de costumbre. El bloqueo está en su lugar a través de la transacción.
ob = MyModel.objects.select_for_update().get(pk=1)
Cualquier cambio se confirma al final de la transacción (que, de forma predeterminada, hasta 1.5 es por solicitud)
También can utilizar select_for_update
con la función 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