Author: carljm
Date: 2011-04-27 08:46:43 -0700 (Wed, 27 Apr 2011)
New Revision: 16106

Modified:
   django/trunk/django/db/models/loading.py
   django/trunk/django/db/models/options.py
   django/trunk/tests/regressiontests/app_loading/not_installed/models.py
   django/trunk/tests/regressiontests/app_loading/tests.py
Log:
Fixed #15903 -- Allowed not-installed models to still be referenced in related 
fields. Missed case from r16053.

Modified: django/trunk/django/db/models/loading.py
===================================================================
--- django/trunk/django/db/models/loading.py    2011-04-26 16:56:17 UTC (rev 
16105)
+++ django/trunk/django/db/models/loading.py    2011-04-27 15:46:43 UTC (rev 
16106)
@@ -159,7 +159,8 @@
         return self.app_errors
 
     def get_models(self, app_mod=None,
-                   include_auto_created=False, include_deferred=False):
+                   include_auto_created=False, include_deferred=False,
+                   only_installed=True):
         """
         Given a module containing models, returns a list of the models.
         Otherwise returns a list of all installed models.
@@ -172,7 +173,7 @@
         queries are *not* included in the list of models. However, if
         you specify include_deferred, they will be.
         """
-        cache_key = (app_mod, include_auto_created, include_deferred)
+        cache_key = (app_mod, include_auto_created, include_deferred, 
only_installed)
         try:
             return self._get_models_cache[cache_key]
         except KeyError:
@@ -185,8 +186,11 @@
             else:
                 app_list = []
         else:
-            app_list = [self.app_models.get(app_label, SortedDict())
-                        for app_label in self.app_labels.iterkeys()]
+            if only_installed:
+                app_list = [self.app_models.get(app_label, SortedDict())
+                            for app_label in self.app_labels.iterkeys()]
+            else:
+                app_list = self.app_models.itervalues()
         model_list = []
         for app in app_list:
             model_list.extend(

Modified: django/trunk/django/db/models/options.py
===================================================================
--- django/trunk/django/db/models/options.py    2011-04-26 16:56:17 UTC (rev 
16105)
+++ django/trunk/django/db/models/options.py    2011-04-27 15:46:43 UTC (rev 
16106)
@@ -383,7 +383,7 @@
                     cache[obj] = parent
                 else:
                     cache[obj] = model
-        for klass in get_models(include_auto_created=True):
+        for klass in get_models(include_auto_created=True, 
only_installed=False):
             for f in klass._meta.local_fields:
                 if f.rel and not isinstance(f.rel.to, str) and self == 
f.rel.to._meta:
                     cache[RelatedObject(f.rel.to, klass, f)] = None

Modified: django/trunk/tests/regressiontests/app_loading/not_installed/models.py
===================================================================
--- django/trunk/tests/regressiontests/app_loading/not_installed/models.py      
2011-04-26 16:56:17 UTC (rev 16105)
+++ django/trunk/tests/regressiontests/app_loading/not_installed/models.py      
2011-04-27 15:46:43 UTC (rev 16106)
@@ -3,3 +3,7 @@
 
 class NotInstalledModel(models.Model):
     pass
+
+
+class RelatedModel(models.Model):
+    not_installed = models.ForeignKey(NotInstalledModel)

Modified: django/trunk/tests/regressiontests/app_loading/tests.py
===================================================================
--- django/trunk/tests/regressiontests/app_loading/tests.py     2011-04-26 
16:56:17 UTC (rev 16105)
+++ django/trunk/tests/regressiontests/app_loading/tests.py     2011-04-27 
15:46:43 UTC (rev 16106)
@@ -85,8 +85,8 @@
 
 class GetModelsTest(TestCase):
     def setUp(self):
-        import not_installed.models
-        self.not_installed_module = not_installed.models
+        from .not_installed import models
+        self.not_installed_module = models
 
 
     def test_get_model_only_returns_installed_models(self):
@@ -94,6 +94,13 @@
             get_model("not_installed", "NotInstalledModel"), None)
 
 
+    def test_get_model_with_not_installed(self):
+        self.assertEqual(
+            get_model(
+                "not_installed", "NotInstalledModel", only_installed=False),
+            self.not_installed_module.NotInstalledModel)
+
+
     def test_get_models_only_returns_installed_models(self):
         self.assertFalse(
             "NotInstalledModel" in
@@ -102,3 +109,17 @@
 
     def test_get_models_with_app_label_only_returns_installed_models(self):
         self.assertEqual(get_models(self.not_installed_module), [])
+
+
+    def test_get_models_with_not_installed(self):
+        self.assertTrue(
+            "NotInstalledModel" in [
+                m.__name__ for m in get_models(only_installed=False)])
+
+
+class NotInstalledModelsTest(TestCase):
+    def test_related_not_installed_model(self):
+        from .not_installed.models import NotInstalledModel
+        self.assertEqual(
+            set(NotInstalledModel._meta.get_all_field_names()),
+            set(["id", "relatedmodel"]))

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to