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.