Sfoglia il codice sorgente

Fixed #22002 -- Documented avoiding database interaction in AppConfig.ready().

Thanks Marc Tamlyn for the suggestion.
Zbigniew Siciarz 11 anni fa
parent
commit
94b5bc361a
3 ha cambiato i file con 19 aggiunte e 0 eliminazioni
  1. 1 0
      AUTHORS
  2. 13 0
      docs/ref/applications.txt
  3. 5 0
      docs/topics/testing/overview.txt

+ 1 - 0
AUTHORS

@@ -561,6 +561,7 @@ answer newbie questions, and generally made Django that much better:
     Peter Sheats <sheats@gmail.com>
     Pete Shinners <pete@shinners.org>
     Leo Shklovskii
+    Zbigniew Siciarz <zbigniew@siciarz.net>
     jason.sidabras@gmail.com
     Mikołaj Siedlarek <mikolaj.siedlarek@gmail.com>
     Karol Sikora <elektrrrus@gmail.com>

+ 13 - 0
docs/ref/applications.txt

@@ -221,6 +221,19 @@ Methods
         def ready(self):
             MyModel = self.get_model('MyModel')
 
+    .. warning::
+
+        Although you can access model classes as described above, avoid
+        interacting with the database in your :meth:`ready()` implementation.
+        This includes model methods that execute queries
+        (:meth:`~django.db.models.Model.save()`,
+        :meth:`~django.db.models.Model.delete()`, manager methods etc.), and
+        also raw SQL queries via ``django.db.connection``. Your
+        :meth:`ready()` method will run during startup of every management
+        command. For example, even though the test database configuration is
+        separate from the production settings, ``manage.py test`` would still
+        execute some queries against your **production** database!
+
 .. _namespace package:
 
 Namespace packages as apps (Python 3.3+)

+ 5 - 0
docs/topics/testing/overview.txt

@@ -196,6 +196,11 @@ advanced settings.
     your tests. *It is a bad idea to have such import-time database queries in
     your code* anyway - rewrite your code so that it doesn't do this.
 
+    .. versionadded:: 1.7
+
+        This also applies to customized implementations of
+        :meth:`~django.apps.AppConfig.ready()`.
+
 .. seealso::
 
     The :ref:`advanced multi-db testing topics <topics-testing-advanced-multidb>`.