Форум сайта python.su
Есть модель, от которой ловятся два сигнала: 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)
Офлайн
по-моему при сейве kwargs передаётся, при делите нет
но как-то не шибко красиво)
Офлайн
Ага, передается, но сейв вызывается и при апдейте, тогда криэйтед не передается)
Офлайн
тогда переделайте все под 2 ф-ции.. (на каждый сигнал своя ф-ция).. а все, что повторяется как-то тоже оберните в некий функционал.
я бы так сделал..)
Офлайн
Наилучшим решением будет замыкание:
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
Офлайн
спасибо)
Офлайн