通过Django信号传递其他属性

时间:2019-02-28 20:32:23

标签: python django django-models django-rest-framework django-signals

是否有任何方法可以将其他参数传递给我保存在数据库中的实例,以便在实例保存后稍后访问它们?

我的案例的简要示例:

我正在使用Django的信号作为事件的触发器,例如发送确认电子邮件,并由其他进程(例如worker)执行。

我愿意指定哪个实例和何时应该触发事件,而哪个则不应该:有时我想创建/更新记录来触发一系列事件,有时我希望它们是静默处理或执行其他操作

对此的一种解决方案是将特定实例的所需行为保存在模型字段中,例如JSONField,并在post_save处恢复该行为,但这似乎很难解决这种问题。

我正在使用post_save信号作为实例是否已正确保存在数据库中的验证,因为我不想触发事件,过了一会儿,在将实例保存到数据库中时出了点问题。

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

保存

1 个答案:

答案 0 :(得分:2)

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

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:
        ...