diff --git a/docs/ref/signals.txt b/docs/ref/signals.txt index d1f5f3c78f..b41b3f63dd 100644 --- a/docs/ref/signals.txt +++ b/docs/ref/signals.txt @@ -509,6 +509,15 @@ For example, you could register a callback in an def ready(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 ----------- diff --git a/docs/topics/signals.txt b/docs/topics/signals.txt index cb1d067c3c..dab29ba4ec 100644 --- a/docs/topics/signals.txt +++ b/docs/topics/signals.txt @@ -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 ``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 `, especially if you're planning + to send them within tests. + .. _connecting-to-specific-signals: Connecting to signals sent by specific senders