2015-07-18 15 views
9

Ai đó có thể giúp tôi hiểu đối số update_field cho tín hiệu Django không?Tín hiệu Django: sử dụng update_field làm điều kiện

According to the docs:

update_fields: Tập hợp các lĩnh vực để cập nhật một cách rõ ràng theo quy định tại các tiết kiệm() phương pháp. Không có gì nếu đối số này không được sử dụng trong lệnh save().

Tôi không hiểu rõ ý nghĩa của điều này. Tôi đã cố gắng sử dụng nó để ngăn chặn một hàm tín hiệu từ thực hiện trừ một số lĩnh vực đã được cập nhật:

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

Tuy nhiên, có vẻ như nó vẫn thực hiện trong suốt một quá trình tín hiệu khi một đối tượng được lưu, thậm chí nếu một lĩnh vực không xác định là được cập nhật rõ ràng:

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

Tôi có gặp vấn đề này không?

Trả lời

8

Điều kiện của bạn không tương ứng với điều bạn muốn là 'sales_qty' luôn đúng.

Bạn muốn tình trạng của bạn là:

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

Điều đó đã làm các trick! Cảm ơn rất nhiều! –

+0

"update_fields" là cú pháp django cho các trường được sửa đổi hoặc tùy chỉnh? – thatzprem

+1

@thatzprem Theo tài liệu đó là cú pháp Django cho các trường để cập nhật (https://docs.djangoproject.com/en/1.8/ref/signals/#post-save). – gpichot

Các vấn đề liên quan