2015-07-18 26 views
9

Birisi bana Django sinyalleri için update_field argümanını anlamama yardımcı olabilir mi?Django Sinyalleri: update_field öğesini koşul olarak kullanma

According to the docs:

update_fields: alanları grubu açıkça() kaydetme yöntemi belirtilen güncellemek için. Bu argüman save() çağrısında kullanılmadıysa hiçbiri. Bu, ne anlama geldiğini açıklığa kavuşturulamamıştır.

Bunun ne anlama geldiğini anlamadım. Belirli alanlar güncellendi sürece yürütülmesini bir sinyal işlevi önlemek için kullanmaya çalışıyordu: Ancak

@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* 

, onu hala belirsiz bir alan olsa bile, bir nesne kaydedilir başka bir sinyal işlemi sırasında çalıştırır gibi görünüyor Açıkça güncelleştirildi:

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

Bu yanlış mı yapıyorum?

cevap

8

Durumunuz, 'sales_qty' her zaman doğru olduğundan istediğinizle uyuşmuyor.

Sen koşulu olmak istiyorum:

hile yaptı
if created or 'sale_item' in update_fields or 'sales_qty' in update_fields: 
+0

! Çok teşekkürler! –

+0

"update_fields", değiştirilmiş alanlar veya özel olan için bir django sözdizimidir? – thatzprem

+1

@thatzprem Belgelere göre, alanların güncellenmesi için Django sözdizimi (https://docs.djangoproject.com/en/1.8/ref/signals/#post-save). – gpichot

İlgili konular