Django信号:使用update_field作为条件

时间:2015-07-18 23:24:13

标签: python django django-models django-signals

有人可以帮我理解Django信号的update_field参数吗?

According to the docs

  

update_fields:要在。中明确指定的要更新的字段集   save()方法。如果在save()调用中没有使用此参数,则为None。

我不清楚这意味着什么。我试图用它来阻止信号功能执行,除非某些字段被更新:

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

但是,即使明确更新了未指定的字段,它似乎仍会在保存对象时在另一个信号进程中执行:

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

我是不是错了?

1 个答案:

答案 0 :(得分:12)

您的情况与您想要的情况不符,' sales_qty'总是如此。

您希望自己的条件是:

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