diff options
author | Anssi Kääriäinen <akaariai@gmail.com> | 2014-07-14 17:53:23 +0300 |
---|---|---|
committer | Anssi Kääriäinen <akaariai@gmail.com> | 2014-08-12 14:58:10 +0300 |
commit | f7dba61881ff5c26ad1c9a6dff71a8dc4ebede5a (patch) | |
tree | d5fca27a8844f00fa7c133c2a88d0428847460b3 /tests/defer_regress | |
parent | 5b0375ec3e7473fcc29c21003fef80c0d0be183f (diff) | |
download | django-f7dba61881ff5c26ad1c9a6dff71a8dc4ebede5a.tar.gz |
Avoided creation of deferred model from another deferred model
Also never create deferred model when no attrs are deferred.
Diffstat (limited to 'tests/defer_regress')
-rw-r--r-- | tests/defer_regress/tests.py | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/tests/defer_regress/tests.py b/tests/defer_regress/tests.py index 63f9e97258..f2a015a7a1 100644 --- a/tests/defer_regress/tests.py +++ b/tests/defer_regress/tests.py @@ -6,6 +6,7 @@ from django.apps import apps from django.contrib.contenttypes.models import ContentType from django.contrib.sessions.backends.db import SessionStore from django.db.models import Count +from django.db.models.query_utils import deferred_class_factory, DeferredAttribute from django.test import TestCase, override_settings from .models import ( @@ -233,7 +234,6 @@ class DeferRegressionTest(TestCase): self.assertEqual(len(qs), 1) def test_deferred_class_factory(self): - from django.db.models.query_utils import deferred_class_factory new_class = deferred_class_factory( Item, ('this_is_some_very_long_attribute_name_so_modelname_truncation_is_triggered',)) @@ -241,6 +241,17 @@ class DeferRegressionTest(TestCase): new_class.__name__, 'Item_Deferred_this_is_some_very_long_attribute_nac34b1f495507dad6b02e2cb235c875e') + def test_deferred_class_factory_already_deferred(self): + deferred_item1 = deferred_class_factory(Item, ('name',)) + deferred_item2 = deferred_class_factory(deferred_item1, ('value',)) + self.assertIs(deferred_item2._meta.proxy_for_model, Item) + self.assertFalse(isinstance(deferred_item2.__dict__.get('name'), DeferredAttribute)) + self.assertTrue(isinstance(deferred_item2.__dict__.get('value'), DeferredAttribute)) + + def test_deferred_class_factory_no_attrs(self): + deferred_cls = deferred_class_factory(Item, ()) + self.assertFalse(deferred_cls._deferred) + class DeferAnnotateSelectRelatedTest(TestCase): def test_defer_annotate_select_related(self): |