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
Новые материалы:
- Python чекер прокси
- Python массив двумерный
- Python обновление программы
- Как убрать клавиатуру в телеграмм боте python
- Python уравнение прямой
- Python id функция
- Нетология python бесплатный курс
- Python умножение строк
- Фриланс python парсинг
- Python считать массив
- Api тестирование на python
- Как вывести нечетные числа в python
- Excel в json python