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