2012-07-03 9 views
8

Quiero incrementar el valor en la base de datos sin tener que realizar un acierto en la base de datos para encontrar el valor real. Efectivamente, me gustaría hacer algo como esto ... pero esto no funciona. ¿Alguna solución elegante?Incrementando valores en la base de datos de django

P.objects.filter(username='John Smith').update(accvalue+=-50) 

THANKS!

Respuesta

10

Echa un vistazo a Django's F() object.

se puede combinar con update() método para actualizar el valor basado en el valor del campo Previos decir

>>> from django.db.models import F 
>>> P.objects.filter(username="John Smith").update(accvalue=F("accvalue") + 50) 

Esto utilizará método nativo UPDATE la base de datos para hacer lo que quiere hacer.

+0

GRACIAS! ¿Cómo es esto en el rendimiento? – snakesNbronies

+0

Mejor que usar el método de guardado regular y en la parte superior de ese hilo seguro :) – bx2

+2

¿Puedo obtener un valor incrementado sin consultar de nuevo? Esto evitará problemas con accesos simultáneos – Don

Cuestiones relacionadas