使用 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:
...
有什么方法可以将额外的参数传递给我保存在数据库中的实例,以便稍后在保存实例后访问它们?
我的案例的简要示例:
我使用 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:
...