Python 使用Django信号传递附加属性
是否有任何方法将其他参数传递给我保存在DB中的实例,以便在实例保存后访问它们 我的例子如下: 我使用Django的信号作为事件的触发器,例如发送确认电子邮件,由其他进程(如workers)执行 我愿意指定哪个实例和什么时候应该触发事件,哪个不应该:有时我希望创建/更新的记录触发一系列事件,有时我希望它们以静默方式成为进程或执行一些其他操作 解决这个问题的一个方法是在模型的字段(如Python 使用Django信号传递附加属性,python,django,django-models,django-rest-framework,django-signals,Python,Django,Django Models,Django Rest Framework,Django Signals,是否有任何方法将其他参数传递给我保存在DB中的实例,以便在实例保存后访问它们 我的例子如下: 我使用Django的信号作为事件的触发器,例如发送确认电子邮件,由其他进程(如workers)执行 我愿意指定哪个实例和什么时候应该触发事件,哪个不应该:有时我希望创建/更新的记录触发一系列事件,有时我希望它们以静默方式成为进程或执行一些其他操作 解决这个问题的一个方法是在模型的字段(如JSONField)中为特定实例保存所需的行为,并在post\u save中恢复此行为,但这似乎是处理此类问题的非常丑
JSONField
)中为特定实例保存所需的行为,并在post\u save
中恢复此行为,但这似乎是处理此类问题的非常丑陋的方法
我使用post_save
信号验证实例是否正确保存在数据库中,因为我不想触发事件,过了一会儿,在数据库中保存实例时出现了问题
实例通过Django
表单
、后端例程和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的事情,还是只是用任何名称添加额外属性的问题?另外,我并不总是在实例上显式调用
save
,大多数情况下它是通过Form
或Serializer
@StanRedoute完成的:它只是一个Python属性,任何名称都可以<代码>表单等可以自定义以执行您想要的操作。在任何情况下,如果您想“指定应该触发事件的实例和时间”,那么这大概必须发生在代码中的某个地方。这是存储实例信息的地方。