📝 Django

Filtering in Django REST Framework

P
Author
Pyland
📅
Published
30.06.2026
⏱️
Reading time
1 min
👁️
Views
68
🌳
Level
Advanced

Охватываемые темы: 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

📝

pytest-django: Testing Django

Охватываемые темы: Installation, @pytest.mark.djangodb, Fixtures, Testing views.

📅 30.06.2026 👁️ 134
📝

Django: Template Tags

Template tags are logic inside HTML. Unlike {{ variable }} which only outputs a value,...

📅 30.06.2026 👁️ 85
📝

Django: Static Files

Static files are CSS, JavaScript, images, and fonts. Django handles them in a specific way:...

📅 30.06.2026 👁️ 73

Did you like the article?

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