DJANGO REST FRAMEWORK ФИЛЬТРАЦИЯ

Django Rest Framework позволяет работать с данными, передаваемыми по API. Один из важных аспектов работы с API – это возможность фильтрации данных. Django Rest Framework предоставляет несколько способов фильтрации:

Фильтрация на основе URL

Один из простых способов фильтрации данных – это фильтрация на основе URL. Для этого необходимо добавить параметры к URL-адресу. Django Rest Framework позволяет определять параметры внутри ViewSet. Например:

class ProductViewSet(viewsets.ModelViewSet):
    serializer_class = ProductSerializer
    filter_backends = [filters.SearchFilter]
    search_fields = ['name', 'description']

В данном примере мы определяем два параметра фильтрации: 'name' и 'description'. Для того чтобы использовать эти параметры в URL, необходимо добавить их к концу URL с помощью '?'. Например:

http://localhost:8000/api/products/?name=apple&description=red

В данном примере мы фильтруем данные по имени продукта (apple) и по описанию (red).

Фильтрация через Queryset

Другой способ фильтрации данных – это фильтрация через Queryset. Для этого необходимо определить метод get_queryset() внутри ViewSet. Например:

class ProductViewSet(viewsets.ModelViewSet):
    serializer_class = ProductSerializer
    def get_queryset(self):
        queryset = Product.objects.all()
        name = self.request.query_params.get('name')
        if name is not None:
            queryset = queryset.filter(name__icontains=name)
        return queryset

В данном примере мы определяем параметр 'name' внутри метода get_queryset(). Затем мы фильтруем данные по имени продукта и возвращаем только те записи, которые удовлетворяют заданным параметрам фильтрации.

Фильтрация через CustomFilterBackend

С помощью CustomFilterBackend можно определять свои собственные методы фильтрации данных. Для этого необходимо определить класс фильтрации и добавить его в параметр filter_backends. Например:

class ProductFilterBackend(filters.BaseFilterBackend):
    def filter_queryset(self, request, queryset, view):
        params = request.query_params
        name = params.get('name')
        if name is not None:
            queryset = queryset.filter(name__icontains=name)
        return queryset
class ProductViewSet(viewsets.ModelViewSet):
    serializer_class = ProductSerializer
    filter_backends = [ProductFilterBackend]

В данном примере мы определяем класс ProductFilterBackend, который фильтрует данные по имени продукта. Затем мы добавляем этот класс в параметр filter_backends для ViewSet.

django-filter фильтрация фильмов по годам и жанрам - django rest framework - урок 10

How to filter query with dynamic multiple query params in Django rest framework

#5. Методы save(), create() и update() класса Serializer - Уроки по Django REST Framework

Django REST Framework apiview Post Insert Save Data

Уроки Django 3 - фильтр фильмов, Q в django - урок 17

37 Фильтрация данных ORM. Методы filter и get. Курс по Django 3

Django 3. Урок 5. Фильтрация по категориям

DRF API фильтры и поиск в блоге - django filter, search

Django Rest Framework API #11 / ModelViewSet and Routers With Serializer.

Serializers и APIView django rest framework - урок 3

BLGPG-03F3154E5385-24-11-23-17

Новые материалы: