Add Filters in Admin
A snippet showing how to add filters in Django admin.
# models.py
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=80)
def __str__(self):
return self.name
class Product(models.Model):
name = models.CharField(max_length=150)
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='products')
price = models.DecimalField(max_digits=8, decimal_places=2)
is_active = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
# admin.py
from django.contrib import admin
from .models import Product, Category
class ActiveFilter(admin.SimpleListFilter):
title = 'active state'
parameter_name = 'active_state'
def lookups(self, request, model_admin):
return (
('active', 'Active'),
('inactive', 'Inactive'),
)
def queryset(self, request, queryset):
value = self.value()
if value == 'active':
return queryset.filter(is_active=True)
if value == 'inactive':
return queryset.filter(is_active=False)
return queryset
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
list_display = ('name', 'category', 'price', 'is_active', 'created_at')
list_filter = (
'category', # FK filter (sidebar dropdown)
'is_active', # Boolean filter
('created_at', admin.DateFieldListFilter), # date hierarchy filter
ActiveFilter, # custom SimpleListFilter
)
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
search_fields = ('name',)
Explanation:
-
Add field names to
list_filterto get sidebar filters automatically (FKs, booleans, choices, dates). -
Use
admin.DateFieldListFilterfor a richer date filter UI onDateField/DateTimeField. -
Create a custom filter with
admin.SimpleListFilterwhen you need bespoke logic or labels. - Keep filters relevant; too many options can clutter the sidebar and slow queries.
- Category Admin
- Total Views 1655
- Last Modified 03 October, 2025
- Tags #admin #filters #customization #list
Previous snippet
Add Search Functionality in Admin
Next snippet