diff options
| author | Matthias Kestenholz <mk@feinheit.ch> | 2019-03-22 13:21:00 +0100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2019-03-22 13:01:15 -0400 |
| commit | a86ffb3e0fd8a37ff1b9affc177e81ef9298ec36 (patch) | |
| tree | 8bf01584d7bfe84199e4d9ae31805dd5cd58b42d | |
| parent | 8cff329802182b6f5147a6a43c1f0e11d40ec1fc (diff) | |
[2.2.x] Fixed #30280 -- Restored Model.get_FIELD_display()'s coercion of lazy strings.
Reverted cc79c7ee637e65c8da27e56d746c87903d5ec901.
Backport of ea071870f943c23a8eaf36dfcdf382afd6478fd1 from master.
| -rw-r--r-- | django/db/models/base.py | 4 | ||||
| -rw-r--r-- | tests/choices/models.py | 5 | ||||
| -rw-r--r-- | tests/choices/tests.py | 3 |
3 files changed, 9 insertions, 3 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py index 2f961a4393..fccc6633af 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -28,6 +28,7 @@ from django.db.models.signals import ( class_prepared, post_init, post_save, pre_init, pre_save, ) from django.db.models.utils import make_model_tuple +from django.utils.encoding import force_str from django.utils.text import capfirst, get_text_list from django.utils.translation import gettext_lazy as _ from django.utils.version import get_version @@ -921,7 +922,8 @@ class Model(metaclass=ModelBase): def _get_FIELD_display(self, field): value = getattr(self, field.attname) - return dict(field.flatchoices).get(value, value) + # force_str() to coerce lazy strings. + return force_str(dict(field.flatchoices).get(value, value), strings_only=True) def _get_next_or_previous_by_FIELD(self, field, is_next, **kwargs): if not self.pk: diff --git a/tests/choices/models.py b/tests/choices/models.py index b4ef8954ab..37ef8daf60 100644 --- a/tests/choices/models.py +++ b/tests/choices/models.py @@ -10,12 +10,13 @@ field. This method returns the "human-readable" value of the field. """ from django.db import models +from django.utils.translation import gettext_lazy as _ class Person(models.Model): GENDER_CHOICES = ( - ('M', 'Male'), - ('F', 'Female'), + ('M', _('Male')), + ('F', _('Female')), ) name = models.CharField(max_length=20) gender = models.CharField(max_length=1, choices=GENDER_CHOICES) diff --git a/tests/choices/tests.py b/tests/choices/tests.py index 329c936c7f..88b8bf7fe2 100644 --- a/tests/choices/tests.py +++ b/tests/choices/tests.py @@ -20,3 +20,6 @@ class ChoicesTests(TestCase): a.gender = 'U' self.assertEqual(a.get_gender_display(), 'U') + + # _get_FIELD_display() coerces lazy strings. + self.assertIsInstance(a.get_gender_display(), str) |
