Commit 3dd5d726 authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #18463 -- Forced type() argument to be a byte string

parent c4c7fbcc
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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
@@ -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.
+7 −0
Original line number Diff line number Diff line
@@ -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')