Есть ли способ перечислить сигналы Django?
Есть ли способ увидеть, какие сигналы были установлены в Django?
Ответы
Ответ 1
Он действительно не отображается в документах, но 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
Ответ 2
Там приложение django, называемое
django-debug-toolbar, который добавляет небольшую панель инструментов в верхней части всех обслуживаемых страниц django, содержащих информацию, относящуюся к бэкэнду страницы, например, как было выполнено много запросов, сколько времени они взяли и т.д. Он также выводит сигналы. Я не использую сигналы в своем приложении, поэтому я никогда не использовал эту функцию, но там.
Ответ 3
Я написал небольшую команду, которая показывает всех прослушивателей сигналов: https://gist.github.com/1264102
Вы можете изменить его, чтобы показывать только сигналы.
Ответ 4
Если вы хотите перечислить только подключенные приемники для определенного сигнала на определенной модели, вы можете посмотреть _live_receivers
. Например, если вы хотите перечислить связанные крючки post_save для модели с именем MyModel, вы можете сделать:
from django.db.models.signals import post_save
from models import MyModel
print(post_save._live_receivers(MyModel))
Я нашел этот подход в исходном коде Django, посмотрев, как работает has_listeners
: https://github.com/django/django/blob/3eb679a86956d9eedf24492f0002de002f7180f5/django/dispatch/dispatcher.py#L153