2015-10-12 2 views
1

Я работаю над Django Signals для обработки данных в Redis всякий раз, когда в базе данных Postgres происходят какие-либо изменения. Но я не могу отправить пользовательские параметры в Signal Receiver. У меня много вопросов, но я не могу понять, как отправлять дополнительные пользовательские параметры в Signal Receiver.Отправить пользовательские параметры для сигналов Django

Обычно я делаю,

@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. И post_save непосредственно вызывается после serializer.save()

Будет здорово, если кто-то может помочь мне в этом.

+0

Возможный дубликат [Передача аргументов django signals - post \ _save/pre \ _save] (http://stackoverflow.com/questions/22999630/passing-arguments-django-signals-post-save-pre-save) –

ответ

1

Вы можете отправить любые дополнительные параметры сигнала в качестве ключевых аргументов:

@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.

+0

Я получаю KeyError в extra_param. Я использую Django Rest Framework и думаю, что serializer.save() вызывает приемник непосредственно после post_save. Следовательно, ключ не передается, что приводит к ошибке. Любое решение? – user2538076

+0

Если сигнал отправки не предоставляет дополнительный параметр, разумно, что получатель его не получит ... Вы должны предоставить дополнительную информацию в своем вопросе. Непонятно, как система остального связана с событиями. Вы всегда можете реализовать свои собственные сигналы. – Wtower

+0

Пользовательские сигналы сделали трюк :) – user2538076