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_filterthat 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
ModelAdminclass properly withadmin.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_filterin yourModelAdminto add sidebar filters. - Filters can be on fields like
BooleanField,DateField,ForeignKey, or fields with choices. - Custom filters can be created by subclassing
SimpleListFilterfor 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.