- Extend
SimpleListFilter
class - Count all values inside of
lookups
method - Return list of tuples with unique value and string title where you add a count form
lookups
E.g. we have lang
param in model and want count MyModels with each unique language:
class MyModel(models.Model):
lang = models.CharField(max_length=3, null=True, blank=True, default=None)
Create list filter class:
class BaseLangFilter(admin.SimpleListFilter):
title = 'Language'
parameter_name = 'lang'
def lookups(self, request, model_admin):
qs = model_admin.get_queryset(request)
for lang in qs.values_list('lang', flat=True).distinct().order_by():
count = qs.filter(lang=lang).count()
if count:
yield (lang, f'{lang} ({count})')
def queryset(self, request, queryset):
# Apply the filter selected, if any
lang = self.value()
if lang:
return queryset.filter(lang=lang)
Class admin:
class ModeltAdmin(admin.ModelAdmin):
...
list_filter = (BaseLanguageFilter, )