0
0
DjangoHow-ToBeginner · 3 min read

How to Add Filter in Admin in Django: Simple Guide

To add filters in Django admin, use the list_filter attribute in your ModelAdmin class. This lets you filter the displayed records by fields like dates, categories, or boolean values in the admin interface.
📐

Syntax

The list_filter attribute is a list or tuple of field names or filter classes you want to enable as filters in the Django admin sidebar.

Each item in list_filter corresponds to a model field or a custom filter.

python
class YourModelAdmin(admin.ModelAdmin):
    list_filter = ['field_name1', 'field_name2', 'field_name3']
💻

Example

This example shows how to add filters for a blog post model by its status and publish date. The filters appear on the right side in the Django admin list view.

python
from django.contrib import admin
from .models import Post

class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'status', 'publish')
    list_filter = ('status', 'publish')

admin.site.register(Post, PostAdmin)
Output
In the Django admin, the Post list page shows a sidebar with filters for 'status' and 'publish' date allowing quick filtering of posts.
⚠️

Common Pitfalls

Common mistakes include:

  • Using field names in list_filter that do not exist on the model, causing errors.
  • Trying to filter on fields that are not suitable, like text fields without choices.
  • Not registering the ModelAdmin class properly with admin.site.register.

Always verify field names and register your admin class.

python
from django.contrib import admin
from .models import Post

# Wrong: 'author_name' does not exist on Post model
class PostAdmin(admin.ModelAdmin):
    list_filter = ('author_name',)  # This will cause an error

# Right:
class PostAdminCorrect(admin.ModelAdmin):
    list_filter = ('author',)  # Assuming 'author' is a valid field

admin.site.register(Post, PostAdminCorrect)
📊

Quick Reference

Summary tips for adding filters in Django admin:

  • Use list_filter in your ModelAdmin to add sidebar filters.
  • Filters can be on fields like BooleanField, DateField, ForeignKey, or fields with choices.
  • Custom filters can be created by subclassing SimpleListFilter for advanced filtering.

Key Takeaways

Add filters in Django admin by setting the list_filter attribute in your ModelAdmin class.
Only use valid model field names or custom filter classes in list_filter to avoid errors.
Filters appear as sidebar options in the admin list view for easy data sorting.
Common filter fields include BooleanField, DateField, ForeignKey, and fields with choices.
For complex needs, create custom filters by subclassing SimpleListFilter.