使用 Django 信号传递附加属性

Pass additional attributes with Django signals

有什么方法可以将额外的参数传递给我保存在数据库中的实例,以便稍后在保存实例后访问它们?

我的案例的简要示例:

我使用 Django 的信号作为事件的触发器,例如发送确认电子邮件,由其他进程执行,例如工作人员。

我愿意指定哪个实例以及何时应该触发事件,哪些不应该:有时我希望 created/updated 记录触发一系列事件,有时我希望它们静默处理或做一些其他的动作。

一个解决方案是在模型的字段中为特定实例保存所需的行为,例如 JSONField 并在 post_save 处恢复此行为,但这似乎是处理此类问题的非常丑陋的方式。

我正在使用 post_save 信号来验证实例是否已正确保存在数据库中,因为我不想触发事件,稍后在数据库中保存实例时出现问题。

实例通过 Django Forms、后端例程和 RestFramework Seralizers

保存

一种解决方案是使用任意模型实例属性(不是字段)来存储所需的状态。例如:

def my_view(request):
    ...
    instance._send_message = True if ... else False
    instance.save()

@receiver(post_save, sender=MyModel)
def my_handler(sender, instance, **kwargs):
    if instance._send_message:
        ...