In Django admin I can change default True/False representation of BooleanField
using choices
argument. It appears in object page and list page. But it doesn't changes in admin list filter. Why? How can I change defaults 'All/Yes/No/Unknown' in list_filter
?
app/models.py
CHOICES_BUILDING_CONDITION = (
(True, 'New'),
(False, 'Old'),
(None, 'Unknown'),
)
class Flat(models.Model):
is_new_building = models.BooleanField(
'Building condition', null=True, blank=True, choices=CHOICES_BUILDING_CONDITION
)
app/admin.py
class FlatAdmin(admin.ModelAdmin):
list_filter = ('is_new_building', )
You can replicate its behavior with:
from django.contrib import admin
from django.utils.translation import gettext_lazy as _
NEW_BUILDING_MAPPING = {'true': True, 'false': False, 'none': None}
class NewBuildingListFilter(admin.SimpleListFilter):
title = _('New building')
parameter_name = 'is_new_building'
def lookups(self, request, model_admin):
return (
('true', _('New')),
('false', _('Old')),
('none', _('Unknown')),
)
def queryset(self, request, queryset):
val = self.value()
if val is not None:
return queryset.filter(is_new_building=NEW_BUILDING_MAPPING[val])
return queryset
and then plug in this filter with:
class FlatAdmin(admin.ModelAdmin):
list_filter = (NewBuildingListFilter,)