Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 4, 2010 16:45:55

Lolka
От:
Зарегистрирован: 2007-09-29
Сообщения: 128
Репутация: +  0  -
Профиль   Отправить e-mail  

Определить сигнал

Есть модель, от которой ловятся два сигнала: post_save и pre_delete. Оба сигнала подключены к одному обработчику и действия, выполняемые этим обработчиком, сходятся полностью, кроме одной операции: при удалении она выполняется, а при сохранении – нет.
Можно как то выяснить, какой именно сигнал отправился в обработчик, delete или save?

post_save.connect(some_signal_handler, sender=SomeModel)
pre_delete.connect(some_signal_handler, sender=SomeModel)
...
def some_signal_handler(sender, **kwargs):
kwargs["signal"] # здесь есть сам сигнал, но как выяснить, какого типа он?



Отредактировано (Ноя. 4, 2010 16:48:13)

Офлайн

#2 Ноя. 4, 2010 17:08:59

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2267
Репутация: +  41  -
Профиль   Отправить e-mail  

Определить сигнал

по-моему при сейве kwargs передаётся, при делите нет
но как-то не шибко красиво)

Офлайн

#3 Ноя. 4, 2010 17:24:26

Lolka
От:
Зарегистрирован: 2007-09-29
Сообщения: 128
Репутация: +  0  -
Профиль   Отправить e-mail  

Определить сигнал

Ага, передается, но сейв вызывается и при апдейте, тогда криэйтед не передается)



Офлайн

#4 Ноя. 4, 2010 20:59:11

vaxXxa
От: Kyiv, Ukraine
Зарегистрирован: 2009-06-16
Сообщения: 278
Репутация: +  0  -
Профиль   Отправить e-mail  

Определить сигнал

тогда переделайте все под 2 ф-ции.. (на каждый сигнал своя ф-ция).. а все, что повторяется как-то тоже оберните в некий функционал.
я бы так сделал..)



Офлайн

#5 Ноя. 4, 2010 21:50:30

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Определить сигнал

Наилучшим решением будет замыкание:

def signal_handler_factory(action = ...): # 'delete', 'create', 'update'
...
def some_common_function(sender, *args, **kwargs):
# implementation depending on action outer parameter
...
...
return some_common_function



Офлайн

#6 Ноя. 5, 2010 14:14:58

Lolka
От:
Зарегистрирован: 2007-09-29
Сообщения: 128
Репутация: +  0  -
Профиль   Отправить e-mail  

Определить сигнал

спасибо)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version