假设我有一个名为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
谢谢
答案 0 :(得分:1)
您可以尝试使用django-model-utils的FieldTracker来跟踪模型字段中的更改。它也与post_save
信号一起使用。
使用信号检查更改
字段跟踪器方法也可以在pre_save和post_save信号处理程序中使用,以标识模型保存时的字段更改。