Рубрики
Без рубрики

Данные фильтрации в рамках отдыха Django

1. Основная настройка Установите Django-фильтр с использованием PIP, PIP Установить Django-фильтр EN … с меткой Django, DjangorestFramework, Python, Filter.

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']
}

Для этого примера я создал Введение Модель и ВведениеЭйализатор класс, как показано ниже. Я собираюсь развиваться в основном три функции здесь, я

  1. Функциональность фильтра данных на основе имя и ID (автоматически сгенерированное поле из модели Django, которая рассматривается как основное ключ)

  2. Поиск данных на основе Имя и Вступление полей и

  3. Заказ данных на основе Имя Поле и установить по умолчанию Заказать на я бы

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”