diff --git a/django/utils/functional.py b/django/utils/functional.py index 236d2ca6e3..666651bd2e 100644 --- a/django/utils/functional.py +++ b/django/utils/functional.py @@ -125,9 +125,8 @@ def lazy(func, *resultclasses): raise ValueError( "Cannot call lazy() with both bytes and text return types." ) - if cls._delegate_text: - cls.__str__ = cls.__text_cast - elif cls._delegate_bytes: + + if cls._delegate_bytes: cls.__bytes__ = cls.__bytes_cast @classmethod @@ -141,17 +140,12 @@ def lazy(func, *resultclasses): return __wrapper__ - def __text_cast(self): - return func(*self.__args, **self.__kw) - def __bytes_cast(self): return bytes(func(*self.__args, **self.__kw)) def __cast(self): if self._delegate_bytes: return self.__bytes_cast() - elif self._delegate_text: - return self.__text_cast() else: return func(*self.__args, **self.__kw) diff --git a/tests/utils_tests/test_functional.py b/tests/utils_tests/test_functional.py index 23e2eaddcd..f1cc751bdd 100644 --- a/tests/utils_tests/test_functional.py +++ b/tests/utils_tests/test_functional.py @@ -233,6 +233,10 @@ class FunctionalTests(SimpleTestCase): with self.assertRaisesMessage(ValueError, msg): lazy_obj() + def test_lazy_str_cast_mixed_result_types(self): + lazy_value = lazy(lambda: [1], str, list)() + self.assertEqual(str(lazy_value), "[1]") + def test_classproperty_getter(self): class Foo: foo_attr = 123