The reason why your overridden get_status_display method is not being applied in the Django admin is because the admin's display_for_field function uses the flatchoices attribute of the field to retrieve the display value of the field's current value.
The flatchoices attribute is a list of two-tuples that represent the choices available for the field, flattened into a single list. The first element of each tuple is the value, and the second element is the display string. The display_for_field function uses the flatchoices list to retrieve the display value of the current value, rather than calling the field's get_FOO_display method. To make use of your overridden get_status_display method in the admin, you can set the flatchoices attribute of the field to None or remove the attribute altogether. This will cause the admin to call the get_status_display method instead of the display_for_field function. class MyModelAdmin(admin.ModelAdmin): form = MyModelForm class MyModelForm(forms.ModelForm): class Meta: model = MyModel fields = '__all__' def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Remove the flatchoices attribute of the status field self.fields['status'].flatchoices = None In this example, we're creating a MyModelForm that is used in the MyModelAdmin. We're overriding the __init__ method of the form to remove the flatchoices attribute of the status field, which will cause the admin to call the get_status_display method instead. On Tue, 4 Apr 2023 at 17:43, 'Ibrahim Abou Elenein' via Django users < django-users@googlegroups.com> wrote: > I had a model having a field that uses Choices > status = FSMField(default=STATUSES.PENDING, choices=STATUSES, > protected=True) > > I did override the `get_status_display ` and its effect was not applied > in the Django admin > > I looked up Django code and found > ``` > def display_for_field(value, field, empty_value_display): from > django.contrib.admin.templatetags.admin_list import _boolean_icon if > getattr(field, "flatchoices", None): return > dict(field.flatchoices).get(value, empty_value_display) > ``` I changed it to use get_FOO_display and it worked, > my question is why does it have this behavior? and how in my application > can I make use of this? > > Thank you. > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to django-users+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/django-users/7dabd818-4b70-409e-8af3-482dffffeb3an%40googlegroups.com > <https://groups.google.com/d/msgid/django-users/7dabd818-4b70-409e-8af3-482dffffeb3an%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAKVBneK9A4QZ72ibUzyHc60SsE6GY4Z7Gua29KObj9m-R%3DVLrA%40mail.gmail.com.