๐Ÿ“ Django

Filtering in Django REST Framework

P
Author
PyLand Team
๐Ÿ“…
Published
30.06.2026
โฑ๏ธ
Reading time
1 min
๐Ÿ‘๏ธ
Views
289
๐ŸŒณ
Level
Advanced

Covered topics: Simple Filtering via Query Params, django-filter, Search and Ordering, filterset_fields โ€” Quick Setup.

Simple Filtering via Query Params

class TaskViewSet(viewsets.ModelViewSet):
    serializer_class = TaskSerializer

    def get_queryset(self):
        qs = Task.objects.filter(owner=self.request.user)
        status = self.request.query_params.get('status')
        priority = self.request.query_params.get('priority')
        if status:
            qs = qs.filter(status=status)
        if priority:
            qs = qs.filter(priority=priority)
        return qs

django-filter

pip install django-filter
# settings.py
INSTALLED_APPS = [..., 'django_filters']

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
}
import django_filters

class TaskFilter(django_filters.FilterSet):
    status = django_filters.CharFilter()
    priority = django_filters.NumberFilter()
    due_before = django_filters.DateFilter(field_name='due_date', lookup_expr='lte')
    due_after = django_filters.DateFilter(field_name='due_date', lookup_expr='gte')
    title = django_filters.CharFilter(lookup_expr='icontains')

    class Meta:
        model = Task
        fields = ['status', 'priority', 'project']

class TaskViewSet(viewsets.ModelViewSet):
    filterset_class = TaskFilter

Search and Ordering

from rest_framework.filters import SearchFilter, OrderingFilter

class TaskViewSet(viewsets.ModelViewSet):
    filter_backends = [
        DjangoFilterBackend,
        SearchFilter,
        OrderingFilter,
    ]
    filterset_class = TaskFilter
    search_fields = ['title', 'description', 'owner__username']
    ordering_fields = ['created_at', 'priority', 'due_date']
    ordering = ['-created_at']  # default ordering
# Example requests
GET /api/tasks/?status=todo&priority=3
GET /api/tasks/?search=important
GET /api/tasks/?ordering=-priority
GET /api/tasks/?due_before=2024-12-31

filterset_fields โ€” Quick Setup

class TaskViewSet(viewsets.ModelViewSet):
    filterset_fields = ['status', 'priority', 'project', 'owner']
    # Exact match only (=)

Your reaction to the article

๐Ÿ’ฌ Comments (0)

๐Ÿ” Sign in to leave a comment
๐Ÿšช Login
๐Ÿ’ญ

No comments yet

Be the first to share your opinion about this article!

๐Ÿ”— Similar

Similar articles

Continue learning with these materials

๐Ÿ“

Search in Django

You can start with simple Django ORM filters and move to PostgreSQL features when you...

๐Ÿ“… 30.06.2026 ๐Ÿ‘๏ธ 279
๐Ÿ“

Swagger Documentation with drf-spectacular

drf-spectacular generates an OpenAPI 3.0 schema and Swagger UI for DRF.

๐Ÿ“… 30.06.2026 ๐Ÿ‘๏ธ 561
๐Ÿ“

settings.py: Django Configuration

settings.py is the central configuration file for a Django project.

๐Ÿ“… 30.06.2026 ๐Ÿ‘๏ธ 315

Did you like the article?

Subscribe to our updates and be the first to receive new articles. Grow with PyLand!