Python 向Django信号发送自定义参数

Python 向Django信号发送自定义参数,python,django,django-models,django-signals,Python,Django,Django Models,Django Signals,我正在处理Django Signals,以便在Postgres数据库发生任何更改时处理Redis中的数据。但是,我无法向信号接收器发送自定义参数。我已经经历了很多问题,但我无法理解如何向信号接收器发送额外的自定义参数 通常我会 @receiver(post_save, sender=post_data) def addToRedis(sender, instance, **kwargs): 但是我想做 @receiver(post_save, sender=post_data) def add

我正在处理Django Signals,以便在Postgres数据库发生任何更改时处理Redis中的数据。但是,我无法向信号接收器发送自定义参数。我已经经历了很多问题,但我无法理解如何向信号接收器发送额外的自定义参数

通常我会

@receiver(post_save, sender=post_data)
def addToRedis(sender, instance, **kwargs):
但是我想做

@receiver(post_save, sender=post_data)
def addToRedis(sender, instance, extra_param=extra_param_data **kwargs):
  # Get `extra_param`
在这里,我想读取额外的参数,将数据存储在Redis

我正在使用Django Rest框架。在serializer.save()之后直接调用post_save


如果有人能在这方面帮助我,那就太好了。

您可以在信号中发送任何附加参数作为关键字参数:

@receiver(post_save, sender=post_data)
def addToRedis(sender, instance, **kwargs):
    # kwargs['extra_param']
如何发送:

my_signal.send(sender=self.__class__, extra_param='...')

如果您无法访问信号发送功能(例如REST框架内部),则始终可以使用。

关于Django REST的回答:

在您的视图中.py

my_obj = Mymodel()
my_obj.your_extra_param = "Param Value" # your_extra_param field (not Defined in Model)
my_obj.save()
post_save.connect(rcver_func,sender=Mymodel,weak=False)
并使用以下命令定义signal.py

from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Mymodel

@receiver(post_save,sender=Mymodel)
def rcver_func(sender, instance, created,**kwargs):
    if created:
        received_param_value = instance.your_extra_param # same field as declared in views.py

额外参数中可能存在重复的“我正在获取密钥错误”。我使用的是Django Rest框架&我猜serializer.save()是在post_save之后直接调用receiver的。因此,不会传递密钥,这将导致错误。有什么解决方案吗?如果发送的信号没有提供附加参数,那么接收器没有得到它是合理的。。。你应该在问题中提供更多信息。不知道rest框架如何处理事件。无论如何,你都可以实现你的自定义信号。这不值得,你需要显式地调用它,而信号的目的是自动调用。