diff options
| author | Carlton Gibson <carlton.gibson@noumenal.es> | 2019-10-31 11:34:56 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-11-04 08:17:50 +0100 |
| commit | 785d1706c411168d5acfa709157f60399ea690d0 (patch) | |
| tree | f9e687cba43b63e30283669fe6ce39ad8ba044e7 | |
| parent | eb8a53c7c1c445cc8245bf0b2136d3062e6c7d17 (diff) | |
[2.2.x] Fixed #30931 -- Restored ability to override Model.get_FIELD_display().
Thanks Sergey Fedoseev for the implementation idea.
Regression in a68ea231012434b522ce45c513d84add516afa60.
Backport of 2d38eb0ab9f78d68c083a5b78b1eca39027b279a from master
| -rw-r--r-- | django/db/models/fields/__init__.py | 8 | ||||
| -rw-r--r-- | docs/releases/2.2.7.txt | 3 | ||||
| -rw-r--r-- | tests/model_fields/tests.py | 10 |
3 files changed, 19 insertions, 2 deletions
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 2210b56dbe..e2d1846ad6 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -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): """ diff --git a/docs/releases/2.2.7.txt b/docs/releases/2.2.7.txt index cf1f52a685..537508225b 100644 --- a/docs/releases/2.2.7.txt +++ b/docs/releases/2.2.7.txt @@ -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`). diff --git a/tests/model_fields/tests.py b/tests/model_fields/tests.py index 9e38f0fcf0..7a26fe01e5 100644 --- a/tests/model_fields/tests.py +++ b/tests/model_fields/tests.py @@ -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. |
