1. Основная настройка
Установите . Django-фильтр
используя PIP,
pip install django-filter
Затем добавьте django_filters
в Джанго Stall_apps
С
INSTALLED_APPS = [ ... 'django_filters', ... ]
Добавьте Default_filter_backends
Установка в Джанго settings.py
файл, как указано ниже,
REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'] }
Для этого примера я создал Введение
Модель и ВведениеЭйализатор
класс, как показано ниже. Я собираюсь развиваться в основном три функции здесь, я
Функциональность фильтра данных на основе
имя
иID
(автоматически сгенерированное поле из модели Django, которая рассматривается как основное ключ)Поиск данных на основе
Имя
иВступление
полей иЗаказ данных на основе
Имя
Поле и установить по умолчанию Заказать ная бы
from django.db import models # Introduction model class Introduction(models.Model): name = models.CharField(max_length=100) intro = models.CharField(max_length=1000, blank=True) video_link = models.CharField(max_length=100, blank=True) def __str__(self): return self.name
from rest_framework import serializers from .models import Introduction class IntroductionSerializer(serializers.ModelSerializer): class Meta: model = Introduction fields = '__all__'
Теперь давайте напишем Viewset
Функция, чтобы применить необходимые фильтры, поиск и заказ. Я собираюсь использовать ModelViewset в этом руководстве. В ModelViewset
, вам нужно предоставить хотя бы Queryset
и serializer_class
атрибут. Для моего дела Queryset
и serializer_class
атрибуты будут как ниже,
from rest_framework.viewsets import ModelViewSet from .models import Introduction from .serializers import IntroductionSerializer # Introduction viewset class IntroductionViewSet(ModelViewSet): queryset = Introduction.objects.all() serializer_class = IntroductionSerializer
2. Реализация функции фильтра
Для фильтрации данных давайте также предоставим некоторые другие атрибуты. filter_backends
Атрибут будет определять, как будет работать ваш фильтр. Вы можете пройти список filter_backends
функции в этом атрибуте. Финал Viewset
Функция с фильтром будет выглядеть следующим,
from django_filters.rest_framework import DjangoFilterBackend from rest_framework.filters import SearchFilter, OrderingFilter from rest_framework.viewsets import ModelViewSet from .models import Introduction from .serializers import IntroductionSerializer # Introduction viewset function with filter functionality class IntroductionViewSet(ModelViewSet): queryset = Introduction.objects.all() serializer_class = IntroductionSerializer filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter] filterset_fields = ['id', 'name'] search_fields = ['=name', 'intro'] ordering_fields = ['name', 'id'] ordering = ['id']
Здесь у меня есть три filter_backends
С
1. Djangofilterbackend: Он будет контролировать фильтровать поля на основе имя
и я d
Пример URL фильтра будет выглядеть следующим образом,
http://localhost:8000/api/introduction/?name=ear
2. Searchfilter: Это поможет поиску имя
и вступление
поля. Поведение поиска может быть ограничено приготовлением различных символов на Search_Fields,
1. '^' Starts-with search 2. '=' Exact matches 3. '@' Full-text search (Currently only supported Django's PostgreSQL backend) 4. '$' Regex search
Пример URL поиска будет выглядеть следующим образом,
http://localhost:8000/api/introduction/?search=Lorem
3. ЗаказФильтер: Это поможет заказать данные на основе имя
и ID
поля. По умолчанию заказ будет в соответствии с ID
поле
Пример URL-адрес фильтра заказа будет выглядеть следующим образом,
http://localhost:8000/api/introduction/?ordering=name
Хорошо, наконец, вы устанавливаете фильтр, поиск и функциональность заказа в вашу Django Read Framework.
Оригинал: “https://dev.to/iamtekson/filter-data-in-django-rest-framework-1h10”