Django:发送信号 - 不理解文档

时间:2010-09-01 14:20:37

标签: django

我定义了两个听众:

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

现在,在对目标进行更改或添加目标(模型类目标)后,我希望该保存发送信号。这是如何实现的。我不明白它的文档。

由于

2 个答案:

答案 0 :(得分:5)

  1. 在your_app / signals.py中定义你的信号(引发信号,不听的应用)

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

  2. 在你的模型/视图中,从你想要提升信号的位置

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

  3. 代码中的其他地方(你想听的地方)

    my_signal.connect(this_is_my_call_back_method)

答案 1 :(得分:2)

来自django docs:

  

此代码应该在哪里生效?

     

你可以把信号处理和   注册码随时随地。   但是,您需要确保这一点   它所在的模块很早就被导入了   因此,信号处理得到   在任何信号需要之前注册   被发送。这使你的应用程序   models.py是个好地方   注册信号处理程序。

您可以在models.py中导入update_dashbaord_modified_date,并在类定义之后将您的方法添加到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)