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_filter to get sidebar filters automatically (FKs, booleans, choices, dates).
  • Use admin.DateFieldListFilter for a richer date filter UI on DateField/DateTimeField.
  • Create a custom filter with admin.SimpleListFilter when 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
Never miss a story on Django.wiki

Subscribe for fresh tutorials, snippets, and updates.

By subscribing you agree to our Privacy Policy.