summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/utils/functional.py10
-rw-r--r--tests/utils_tests/test_functional.py4
2 files changed, 6 insertions, 8 deletions
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