2012-05-11 6 views

risposta

22

Sì.

Product.objects.filter(name='Venezuelan Beaver Cheese').update(number_sold=4) 

Se si dispone di un'istanza del modello è stato modificato e si desidera salvare solo i campi specifici per il database, fare questo:

product.name = "New name of the product" 
product.save(update_fields=['name']) 
+1

Link alla documentazione: [Aggiornamento più oggetti contemporaneamente] (https://docs.djangoproject.com/en/dev/topics/db/queries/#updating-multiple-objects-at-once) (non lasciarti ingannare dal titolo, puoi selezionarne uno fila e in questo modo aggiorna solo una). – Tadeck

+2

Django 1.5 ora consente di aggiornare solo un campo su save() con il parametro update_fields https://docs.djangoproject.com/en/1.5/ref/models/instances/#specifying-which-fields-to-save – poiuytrez

+0

@ poiuytrez Link è rotto. Cura di aggiornare? – rschwieb

6

@ risposta di Lovelive è il modo migliore per andare. L'unico lato negativo è che non si ottiene l'istanza con quello. Quindi hai ancora bisogno della linea product = Product.objects.get(...) se hai bisogno di product per altro. Tuttavia, copre lo scenario caso d'uso di "comprimere perfettamente le ultime due linee in una singola riga".

Giusto per fare l'avvocato del diavolo, si potrebbe anche aggiungere un metodo al modello:

class Product(models.Model): 
    ... 
    def update(self, **kwargs): 
     for k, v in kwargs.iteritems(): 
      setattr(self, k, v) 
     self.save() 
0

A seconda della situazione questo è anche un'alternativa:

product.save(update_fields=["number_sold"]) 
Problemi correlati