Loading django/db/models/query_utils.py +2 −1 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ Factored out from django.db.models.query to avoid making the main module very large and/or so that they can be used by other modules without getting into circular import difficulties. """ from __future__ import unicode_literals from django.db.backends import util from django.utils import tree Loading Loading @@ -177,7 +178,7 @@ def deferred_class_factory(model, attrs): overrides["Meta"] = Meta overrides["__module__"] = model.__module__ overrides["_deferred"] = True return type(name, (model,), overrides) return type(str(name), (model,), overrides) # The above function is also used to unpickle model instances with deferred # fields. Loading tests/regressiontests/defer_regress/tests.py +7 −0 Original line number Diff line number Diff line Loading @@ -174,3 +174,10 @@ class DeferRegressionTest(TestCase): qs = ResolveThis.objects.defer('num') self.assertEqual(1, qs.count()) self.assertEqual('Foobar', qs[0].name) 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',)) self.assertEqual(new_class.__name__, 'Item_Deferred_this_is_some_very_long_attribute_nac34b1f495507dad6b02e2cb235c875e') Loading
django/db/models/query_utils.py +2 −1 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ Factored out from django.db.models.query to avoid making the main module very large and/or so that they can be used by other modules without getting into circular import difficulties. """ from __future__ import unicode_literals from django.db.backends import util from django.utils import tree Loading Loading @@ -177,7 +178,7 @@ def deferred_class_factory(model, attrs): overrides["Meta"] = Meta overrides["__module__"] = model.__module__ overrides["_deferred"] = True return type(name, (model,), overrides) return type(str(name), (model,), overrides) # The above function is also used to unpickle model instances with deferred # fields. Loading
tests/regressiontests/defer_regress/tests.py +7 −0 Original line number Diff line number Diff line Loading @@ -174,3 +174,10 @@ class DeferRegressionTest(TestCase): qs = ResolveThis.objects.defer('num') self.assertEqual(1, qs.count()) self.assertEqual('Foobar', qs[0].name) 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',)) self.assertEqual(new_class.__name__, 'Item_Deferred_this_is_some_very_long_attribute_nac34b1f495507dad6b02e2cb235c875e')