Filtering, Searching & Ordering
DRF provides filtering backends for URL-based filtering, searching, and ordering. django-filter integrates advanced filtering with DRF — filter by any model field with lookups, ranges, and custom filters.
15 min•By Priygop Team•Updated 2026
Filtering Options
- SearchFilter — ?search=django (searches specified fields)
- OrderingFilter — ?ordering=-created_at (sort results)
- DjangoFilterBackend — ?category=python&published=true
- pip install django-filter for advanced filtering
- filterset_fields — Quick filter by model fields
- FilterSet class — Custom filter logic
- Combine multiple filters on one view
Filtering Example
Filtering Example
# pip install django-filter
# settings.py
# INSTALLED_APPS = [..., 'django_filters']
# REST_FRAMEWORK = {
# 'DEFAULT_FILTER_BACKENDS': [
# 'django_filters.rest_framework.DjangoFilterBackend',
# 'rest_framework.filters.SearchFilter',
# 'rest_framework.filters.OrderingFilter',
# ],
# }
# blog/views.py
# class PostViewSet(viewsets.ModelViewSet):
# queryset = Post.objects.all()
# serializer_class = PostSerializer
#
# # Quick filtering
# filterset_fields = ['category', 'published', 'author']
#
# # Search
# search_fields = ['title', 'content', 'author__username']
#
# # Ordering
# ordering_fields = ['created_at', 'views_count', 'title']
# ordering = ['-created_at'] # Default ordering
# API usage:
# /api/posts/?category=1 -> Filter by category
# /api/posts/?published=true -> Filter published
# /api/posts/?search=django -> Search title & content
# /api/posts/?ordering=-views_count -> Sort by views (desc)
# /api/posts/?category=1&search=api&ordering=-created_at -> CombinedTip
Tip
Use SearchFilter for text search, OrderingFilter for sorting, DjangoFilterBackend for field-based filtering.
Diagram
Loading diagram…
QuerySets are LAZY — no DB hit until evaluated.
Common Mistake
Warning
Not adding search/filter to list endpoints. Users expect to search and filter — don't make them paginate through everything.
Practice Task
Note
(1) Add SearchFilter to a ListView API. (2) Add OrderingFilter. (3) Add DjangoFilterBackend for category filtering.
Quick Quiz
Key Takeaways
- DRF provides filtering backends for URL-based filtering, searching, and ordering.
- SearchFilter — ?search=django (searches specified fields)
- OrderingFilter — ?ordering=-created_at (sort results)
- DjangoFilterBackend — ?category=python&published=true