[2.2.x] Fixed #30931 -- Restored ability to override Model.get_FIELD_display().
Thanks Sergey Fedoseev for the implementation idea. Regression ina68ea23101
. Backport of2d38eb0ab9
from master
This commit is contained in:
parent
eb8a53c7c1
commit
785d1706c4
|
@ -743,8 +743,12 @@ class Field(RegisterLookupMixin):
|
|||
if not getattr(cls, self.attname, None):
|
||||
setattr(cls, self.attname, DeferredAttribute(self.attname))
|
||||
if self.choices:
|
||||
setattr(cls, 'get_%s_display' % self.name,
|
||||
partialmethod(cls._get_FIELD_display, field=self))
|
||||
if not hasattr(cls, 'get_%s_display' % self.name):
|
||||
setattr(
|
||||
cls,
|
||||
'get_%s_display' % self.name,
|
||||
partialmethod(cls._get_FIELD_display, field=self),
|
||||
)
|
||||
|
||||
def get_filter_kwargs_for_object(self, obj):
|
||||
"""
|
||||
|
|
|
@ -21,3 +21,6 @@ Bugfixes
|
|||
* Fixed migrations crash on PostgreSQL when adding an
|
||||
:class:`~django.db.models.Index` with fields ordering and
|
||||
:attr:`~.Index.opclasses` (:ticket:`30903`).
|
||||
|
||||
* Restored the ability to override
|
||||
:meth:`~django.db.models.Model.get_FOO_display` (:ticket:`30931`).
|
||||
|
|
|
@ -114,6 +114,16 @@ class ChoicesTests(SimpleTestCase):
|
|||
self.assertIsNone(Whiz(c=None).get_c_display()) # Blank value
|
||||
self.assertEqual(Whiz(c='').get_c_display(), '') # Empty value
|
||||
|
||||
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):
|
||||
"""
|
||||
get_choices() works with Iterators.
|
||||
|
|
Loading…
Reference in New Issue