Browse Source

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

Refs #23641.
wrwrwr 10 years ago
parent
commit
d66bda6059
2 changed files with 16 additions and 0 deletions
  1. 9 0
      docs/ref/signals.txt
  2. 7 0
      docs/topics/signals.txt

+ 9 - 0
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
 -----------
 

+ 7 - 0
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 <preventing-duplicate-signals>`, especially if you're planning
+    to send them within tests.
+
 .. _connecting-to-specific-signals:
 
 Connecting to signals sent by specific senders