Added notes on registering signals in ready() and using dispatch_uid.

Refs #23641.
This commit is contained in:
wrwrwr 2014-11-27 11:22:23 -05:00 committed by Tim Graham
parent a15aba66f2
commit d66bda6059
2 changed files with 16 additions and 0 deletions

View File

@ -509,6 +509,15 @@ For example, you could register a callback in an
def ready(self): def ready(self):
post_migrate.connect(my_callback, sender=self) post_migrate.connect(my_callback, sender=self)
.. note::
If you provide an :class:`~django.apps.AppConfig` instance as the sender
argument, please ensure that the signal is registered in
:meth:`~django.apps.AppConfig.ready`. ``AppConfig``\s are recreated for
tests that run with a modified set of :setting:`INSTALLED_APPS` (such as
when settings are overridden) and such signals should be connected for each
new ``AppConfig`` instance.
post_syncdb post_syncdb
----------- -----------

View File

@ -146,6 +146,13 @@ Now, our ``my_callback`` function will be called each time a request finishes.
versions of Django, signal registration usually happened in the versions of Django, signal registration usually happened in the
``models`` module. ``models`` module.
.. note::
The :meth:`~django.apps.AppConfig.ready` method may be executed more than
once during testing, so you may want to :ref:`guard your signals from
duplication <preventing-duplicate-signals>`, especially if you're planning
to send them within tests.
.. _connecting-to-specific-signals: .. _connecting-to-specific-signals:
Connecting to signals sent by specific senders Connecting to signals sent by specific senders