From 3ac39bb63d6155c784690394d27bbdfc4b80f957 Mon Sep 17 00:00:00 2001 From: wrwrwr Date: Thu, 27 Nov 2014 11:22:23 -0500 Subject: [PATCH] [1.7.x] Added notes on registering signals in ready() and using dispatch_uid. Refs #23641. Backport of d66bda60590daabe21f60a532a613a31a10fedbd from master --- docs/ref/signals.txt | 9 +++++++++ docs/topics/signals.txt | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/docs/ref/signals.txt b/docs/ref/signals.txt index ee1b4903c4..c0f822b1a9 100644 --- a/docs/ref/signals.txt +++ b/docs/ref/signals.txt @@ -512,6 +512,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 346d47d179..d4d79511be 100644 --- a/docs/topics/signals.txt +++ b/docs/topics/signals.txt @@ -153,6 +153,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