我正在研究Django Signals,以便在Postgres数据库发生任何变化时处理Redis中的数据。但是,我无法将自定义参数发送到信号接收器。我已经经历了很多问题,但我无法理解如何向Signal Receiver发送额外的自定义参数。
通常我这样做,
@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
如果有人可以帮助我,那就太好了。
您可以将信号中的任何其他参数作为关键字参数发送:
@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。
这回答了对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