有没有办法列出Django信号?

有没有办法列出Django信号?,django,signals,django-signals,Django,Signals,Django Signals,有没有办法查看Django中设置了哪些信号?有一个名为 它在所有django服务的页面顶部添加了一个小工具栏,提供与页面呈现后端相关的信息,例如执行了多少次查询,每次查询花费了多少时间,等等。它还输出信号。我在我的应用程序中不使用信号,所以我从未使用过该功能,但它确实存在。它并没有在文档中公开,但信号只是一个类,它包含事件中调用的接收器列表。您可以手动检查此列表: from django.db.models.signals import * for signal in [pre_save, p

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

有一个名为
它在所有django服务的页面顶部添加了一个小工具栏,提供与页面呈现后端相关的信息,例如执行了多少次查询,每次查询花费了多少时间,等等。它还输出信号。我在我的应用程序中不使用信号,所以我从未使用过该功能,但它确实存在。

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

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

我编写了一个显示所有信号侦听器的小命令:


您可以将其修改为仅显示信号。

如果您想仅列出特定型号上特定信号的连接接收器,您可以查看
\u live\u receivers
。例如,如果要为名为MyModel的模型列出已连接的post_保存挂钩,可以执行以下操作:

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

我在Django源代码中找到了这种方法,通过查找
的监听器如何工作:

您列出了7个信号,这些都是正确的。但是为了从算法上获得列表,
从django.db.models导入信号
,然后
[s for s in vars(signals).values()(如果是instance(s,signals.ModelSignal)]
同样,通过使用该列表,我发现
post\u syncdb
似乎被重命名为
post\u migrate