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:
parent
8463390527
commit
2d38eb0ab9
|
@ -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):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -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`).
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in New Issue