24

有没有办法查看 Django 中设置了哪些信号?

4

4 回答 4

32

它并没有真正在文档中公开,但 Signal 只是一个包含在事件中调用的接收器列表的类。您可以手动检查此列表:

from django.db.models.signals import *

for signal in [pre_save, pre_init, pre_delete, post_save, post_delete, post_init, post_syncdb]:
    # print a List of connected listeners
    print signal.receivers
于 2009-12-25T09:12:02.990 回答
11

有一个名为 django-debug-toolbar的 django 应用程序,它在所有 django 服务页面的顶部添加了一个小工具栏,提供与页面渲染后端相关的信息,例如执行了多少查询,每个查询花费了多少时间等. 它还打印出信号。我不在我的应用程序中使用信号,所以我从未使用过该功能,但它就在那里。

于 2009-07-06T15:59:17.153 回答
8

我写了一个显示所有信号监听器的小命令:https ://gist.github.com/1264102

您可以修改它以仅显示信号。

于 2011-11-17T12:06:00.697 回答
5

如果您只想列出特定型号上特定信号的连接接收器,您可以查看_live_receivers. 例如,如果你想为一个名为 MyModel 的模型列出连接的 post_save 钩子,你可以这样做:

from django.db.models.signals import post_save
from models import MyModel
print(post_save._live_receivers(MyModel))

我通过查找工作原理在 Django 源代码中找到了这种方法has_listenershttps ://github.com/django/django/blob/3eb679a86956d9eedf24492f0002de002f7180f5/django/dispatch/dispatcher.py#L153

于 2017-03-28T09:56:17.933 回答