区分signal.instance,Django / signals中哪个字段已更改

时间:2019-06-19 07:14:08

标签: django django-signals

假设我有一个名为BookModel的模型,其中包含4个字段:(书名,作者,价格,出版年)。

我在信号处理程序中有一个处理程序:

@receiver([post_save, post_delete], sender=BookModel)
def signal_handler(sender, instance, **kwargs):
…..

问题是当save()期间特定模型字段发生更改时如何区分情况。例如,如果价格发生变化,我想做些事情。用伪代码更好地解释...

@receiver([post_save, post_delete], sender=BookModel)
def signal_handler(sender, instance, **kwargs):
# pseudo code bellow
if field “price” has changed:
    do stuff
else:
    do nothing

根据文档,如果我在save()中使用“ update_fields”-可以,但是如果我不使用它怎么办??

当我仍然使用1个处理程序接收来自post_save或post_delete的信号时,还能区分情况吗?

@receiver([post_save, post_delete], sender=BookModel)
def signal_handler(sender, instance, **kwargs):
# pseudo code bellow
if signal is post_save:
    if field “price” has changed:
        do stuff
    else:
        do nothing
else:
    do other stuff

谢谢

1 个答案:

答案 0 :(得分:1)

您可以尝试使用django-model-utils的FieldTracker来跟踪模型字段中的更改。它也与post_save信号一起使用。

  

使用信号检查更改

     

字段跟踪器方法也可以在pre_save和post_save信号处理程序中使用,以标识模型保存时的字段更改。