【问题标题】:Distinguish which field has changed in signal.instance , Django/signals区分 signal.instance 、 Django/signals 中哪个字段发生了变化
【发布时间】:2023-03-23 15:15:01
【问题描述】:

假设我有一个名为 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” - 这是可能的,但如果我不使用它会怎样???

当我从 post_save 或 post_delete 接收到信号时仍然使用 1 个处理程序时,是否可以区分情况?

@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

谢谢

【问题讨论】:

    标签: django django-signals


    【解决方案1】:

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

    使用信号检查更改

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

    【讨论】:

    • 谢谢。那是一种选择。关于如何在一个处理程序中区分 2 个 post_save 和 post_delete 的问题仍然存在
    猜你喜欢
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    相关资源
    最近更新 更多