Джанго: отправка сигналов - непонимание документации - PullRequest
5 голосов
/ 01 сентября 2010

У меня определены 2 слушателя:

def update_dashbaord_modified_date(sender, **kwargs):
    """Listen for changes to Goal, Action, etc. since we
    want to update the date modified on Dashbaord when a change occurs."""
    ... do something ...

post_save.connect(update_dashbaord_modified_date) # Register to listen for post_save signals
post_delete.connect(update_dashbaord_modified_date) # Register to listen for post_delete signals

И теперь, после изменения цели или добавления цели (класс модели Goal), я хочу сохранить, чтобы отправить сигнал.Как это реализовано.Я не понимаю документацию для этого.

Спасибо

Ответы [ 2 ]

6 голосов
/ 02 сентября 2010
  1. Определите ваши сигналы в your_app / signal.py (приложение, которое вызывает сигнал, а не слушает)

    from django.dispatch import Signal<br> my_signal = Signal(providing_args=["instance", "args", "kwargs"])

  2. в вашей модели / виде, откуда вы хотите поднять сигнал

    ...do some processing<br> my_signal.send(sender=self.__class__, args, kwargs)<br> # kwargs contains type of action, in your case<br> # action= 'Added'|'Modified'|'Deleted",

  3. где-то еще в коде (где бы вы ни хотели слушать)

    my_signal.connect(this_is_my_call_back_method)

2 голосов
/ 01 сентября 2010

Из документации Django:

Где этот код должен жить?

Вы можете поставить обработку сигналов и регистрационный код где угодно. Тем не менее, вам нужно убедиться, что модуль в котором он импортируется рано на так что обработка сигнала получает зарегистрирован, прежде чем какие-либо сигналы должны быть отправлено. Это делает ваше приложение models.py хорошее место для размещения регистрация обработчиков сигналов.

Вы можете импортировать update_dashbaord_modified_date в вашем models.py и после определения класса добавить свой метод в обработчики post_save и post_delete.

from signals import update_dashbaord_modified_date
class myModel(models.Model):
     stuff
post_save.connect(update_dashbaord_modified_date) 
post_delete.connect(update_dashbaord_modified_date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...