📝 Django

Фильтрация в Django REST Framework

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
67
🌳
Уровень
Продвинутый
🐦 💼 ✈️

Охватываемые темы: Простая фильтрация через query params, django-filter, Поиск и сортировка, filterset_fields — быстрая настройка.

Простая фильтрация через 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

Поиск и сортировка

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']  # по умолчанию
# Примеры запросов
GET /api/tasks/?status=todo&priority=3
GET /api/tasks/?search=важная
GET /api/tasks/?ordering=-priority
GET /api/tasks/?due_before=2024-12-31

filterset_fields — быстрая настройка

class TaskViewSet(viewsets.ModelViewSet):
    filterset_fields = ['status', 'priority', 'project', 'owner']
    # Только точное совпадение (=)

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

pytest-django: тестирование Django

Охватываемые темы: Установка, @pytest.mark.djangodb, Фикстуры, Тестирование views.

📅 30.06.2026 👁️ 132
📝

Django: Теги шаблонов

Теги шаблонов — это логика внутри HTML. В отличие от {{ переменная }}, которая только...

📅 30.06.2026 👁️ 85
📝

Django: Статические файлы

Статические файлы — CSS, JavaScript, изображения, шрифты. Django обрабатывает их особым образом: в разработке раздаёт...

📅 30.06.2026 👁️ 73

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!