diff --git a/django/db/models/enums.py b/django/db/models/enums.py index bbe362a6ab..ae20ef6d93 100644 --- a/django/db/models/enums.py +++ b/django/db/models/enums.py @@ -60,7 +60,13 @@ class ChoicesMeta(enum.EnumMeta): class Choices(enum.Enum, metaclass=ChoicesMeta): """Class for creating enumerated choices.""" - pass + + def __str__(self): + """ + Use value when cast to str, so that Choices set as model instance + attributes are rendered as expected in templates and similar contexts. + """ + return str(self.value) class IntegerChoices(int, Choices): diff --git a/tests/model_enums/tests.py b/tests/model_enums/tests.py index 6b4bd6e7fd..e1810e673a 100644 --- a/tests/model_enums/tests.py +++ b/tests/model_enums/tests.py @@ -143,6 +143,12 @@ class ChoicesTests(SimpleTestCase): APPLE = 1, 'Apple' PINEAPPLE = 1, 'Pineapple' + def test_str(self): + for test in [Gender, Suit, YearInSchool, Vehicle]: + for member in test: + with self.subTest(member=member): + self.assertEqual(str(test[member.name]), str(member.value)) + class Separator(bytes, models.Choices): FS = b'\x1c', 'File Separator'