2015-07-18 26 views
9

Qualcuno può aiutarmi a comprendere l'argomento update_field per i segnali Django?Segnali Django: utilizzo di update_field come condizione

According to the docs:

update_fields: L'insieme dei campi per aggiornare esplicitamente specificato nel metodo di salvataggio(). Nessuna se questo argomento non è stato utilizzato nella chiamata save().

Non sono chiaro su cosa significhi. Stavo cercando di usarlo per evitare che una funzione segnale di esecuzione, salvo alcuni campi sono stati aggiornati:

@receiver(post_save, sender=SalesRecord) 
def spawn_SaleSource_record(sender, update_fields, created, instance, **kwargs): 
    if created or update_fields is 'sale_item' or 'sales_qty': 
     *do function* 

Tuttavia, sembra che esegue ancora durante un altro processo del segnale quando un oggetto viene salvato, anche se un campo non specificato è esplicitamente aggiornato:

x = SalesRecord.objects.filter(paid_off=False, customer=instance.customer).first() 
x.paid_off = True 
x.save(update_fields=['paid_off']) 

Sto andando su questo sbagliato?

risposta

8

La tua condizione non corrisponde a ciò che desideri poiché 'sales_qty' è sempre true.

volete che il vostro condizione di essere:

if created or 'sale_item' in update_fields or 'sales_qty' in update_fields: 
+0

Che ha fatto il trucco! Grazie mille! –

+0

"update_fields" è una sintassi di django per campi modificati o personalizzati? – thatzprem

+1

@thatzprem Secondo la documentazione è la sintassi di Django per i campi da aggiornare (https://docs.djangoproject.com/en/1.8/ref/signals/#post-save). – gpichot

Problemi correlati