2013-03-10 15 views
8

ho bisogno di implementare questa query utilizzando ORM Django:generare query di aggiornamento utilizzando ORM Django

update table set field=field+1 where id=id 

Non whant utilizzare questo:

o = model.objects.get(id=id) 
o.field+=1 
o.save() 

perché utilizzare l'aggiornamento di selezione e quando, e non thread sicuro.

Come implementare questo via orm?

risposta

24

Sia i answerers precedenti hanno parte della soluzione: si dovrebbe usare update in combinazione con F():

Model.objects.filter(id=id).update(field=F('field') +1)) 

Nota questo fa un in -place UPDATE senza alcun bisogno di SELECT affatto.

1

È possibile utilizzare update, i dettagli possono essere trovati in the documentation

+0

OP desidera aggiornare gli attributi in base ai campi esistenti in un modo thread-safe, fatto da F() Expressions. Non penso che l'aggiornamento abbia tale funzionalità. sei sicuro? – jurgenreza

Problemi correlati