将自定义参数发送到Django信号

时间:2015-10-12 09:05:18

标签: 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 addToRedis(sender, instance, extra_param=extra_param_data **kwargs):
  # Get `extra_param`

在这里,我想阅读 extra_param 以将数据存储在 Redis 中。

我正在使用Django Rest Framework。并且在serializer.save()

之后直接调用post_save

如果有人可以帮助我,那就太棒了。

2 个答案:

答案 0 :(得分:2)

您可以将信号中的任何其他参数作为关键字参数发送:

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

如何发送:

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

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

答案 1 :(得分:1)

此答案关于Django Rest:

在您的views.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