Fixed #30931 -- Restored ability to override Model.get_FIELD_display().

Thanks Sergey Fedoseev for the implementation idea.

Regression in a68ea23101.
This commit is contained in:
Carlton Gibson 2019-10-31 11:34:56 +01:00 committed by Mariusz Felisiak
parent 8463390527
commit 2d38eb0ab9
3 changed files with 19 additions and 2 deletions

View File

@ -763,8 +763,12 @@ class Field(RegisterLookupMixin):
if not getattr(cls, self.attname, None): if not getattr(cls, self.attname, None):
setattr(cls, self.attname, self.descriptor_class(self)) setattr(cls, self.attname, self.descriptor_class(self))
if self.choices is not None: if self.choices is not None:
setattr(cls, 'get_%s_display' % self.name, if not hasattr(cls, 'get_%s_display' % self.name):
partialmethod(cls._get_FIELD_display, field=self)) setattr(
cls,
'get_%s_display' % self.name,
partialmethod(cls._get_FIELD_display, field=self),
)
def get_filter_kwargs_for_object(self, obj): def get_filter_kwargs_for_object(self, obj):
""" """

View File

@ -21,3 +21,6 @@ Bugfixes
* Fixed migrations crash on PostgreSQL when adding an * Fixed migrations crash on PostgreSQL when adding an
:class:`~django.db.models.Index` with fields ordering and :class:`~django.db.models.Index` with fields ordering and
:attr:`~.Index.opclasses` (:ticket:`30903`). :attr:`~.Index.opclasses` (:ticket:`30903`).
* Restored the ability to override
:meth:`~django.db.models.Model.get_FOO_display` (:ticket:`30931`).

View File

@ -168,6 +168,16 @@ class GetFieldDisplayTests(SimpleTestCase):
self.assertIsInstance(val, str) self.assertIsInstance(val, str)
self.assertEqual(val, 'translated') self.assertEqual(val, 'translated')
def test_overriding_FIELD_display(self):
class FooBar(models.Model):
foo_bar = models.IntegerField(choices=[(1, 'foo'), (2, 'bar')])
def get_foo_bar_display(self):
return 'something'
f = FooBar(foo_bar=1)
self.assertEqual(f.get_foo_bar_display(), 'something')
def test_iterator_choices(self): def test_iterator_choices(self):
""" """
get_choices() works with Iterators. get_choices() works with Iterators.