Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Django信号传递附加属性_Python_Django_Django Models_Django Rest Framework_Django Signals - Fatal编程技术网

Python 使用Django信号传递附加属性

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中恢复此行为,但这似乎是处理此类问题的非常丑

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

我的例子如下:

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

我愿意指定哪个实例和什么时候应该触发事件,哪个不应该:有时我希望创建/更新的记录触发一系列事件,有时我希望它们以静默方式成为进程或执行一些其他操作

解决这个问题的一个方法是在模型的字段(如
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属性,任何名称都可以<代码>表单等可以自定义以执行您想要的操作。在任何情况下,如果您想“指定应该触发事件的实例和时间”,那么这大概必须发生在代码中的某个地方。这是存储实例信息的地方。