Is there a way to list Django signals?

前端 未结 4 369
面向向阳花
面向向阳花 2021-02-04 00:48

Is there a way to see which signals have been set in Django?

相关标签:
4条回答
  • 2021-02-04 01:07

    It's not really exposed in docs but Signal is just a class that contains a list of receivers which are called on event. You can manually check this list:

    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
    
    0 讨论(0)
  • 2021-02-04 01:11

    There's a django app called django-debug-toolbar which adds a little toolbar at the top of all django served pages providing info related to the backend of the page's rendering, such as how many queries were executed, how much time they each took, etc. It also prints out signals. I don't use signals in my app, so I have never used that feature, but it's there.

    0 讨论(0)
  • 2021-02-04 01:19

    I wrote little command that shows all signal listeners: https://gist.github.com/1264102

    You can modify it to show signals only.

    0 讨论(0)
  • 2021-02-04 01:23

    If you want to list only the connected receivers for a specific signal on a specific model, you can look at _live_receivers. For instance, if you want to list the connected post_save hooks for a model named MyModel, you can do:

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

    I found this approach in the Django source code by looking for how has_listeners works: https://github.com/django/django/blob/3eb679a86956d9eedf24492f0002de002f7180f5/django/dispatch/dispatcher.py#L153

    0 讨论(0)
提交回复
热议问题