DRF过滤、搜索过滤、排序方法

DRF框架过滤器、搜索、排序方法。

*
过滤器
搜索过滤
排序

过滤器

  1. 过滤器的使用首先需要安装django-filter模块,— pip install django-filter模块
  2. 在视图中导入模块
from django_filters.rest_framework import DjangoFilterBackend
  1. 在settings.py的INSTALLED_APPS中添加app
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
    'rest_framework',  # DRF html页面
    'django_filters'   # 过滤 html页面
]
  1. 导入成功后在视图类中添加两个属性
class Test(ListModelMixin, RetrieveModelMixin, GenericViewSet):
    filter_backends = [DjangoFilterBackend]  # 刚才导入的过滤器类
    filter_fields = ('id', 'date')   # 过滤的字段
  • 当然这只局限于对已有字段的相等过滤,并没有大于或者小于某个条件的过滤,我们还可以通过自定义过滤类来实现。

  • 首先导入类模块

import django_filters
  1. 然后新建一个过滤类
class TestFilter(django_filters.FilterSet):
        # 可以添加一些时间范围的过滤
        date_gte = django_filters.DateFilter(label='日期大于', field_name='date', lookup_expr='date__gte')
        date_lt = django_filters.DateFilter(label='日期小于', field_name='date', lookup_expr='date__lte')
        class Meta:
            model = Test  # 过滤的model。
            fields = ['id']     # 需要过滤的字段,类似上面的filter_fields 属性。
  1. 删除上面的filter_fields属性替换成filter_class
class Test(ListModelMixin, RetrieveModelMixin, GenericViewSet):
    filter_backends = [DjangoFilterBackend]  # 刚才导入的过滤器类
    filter_class = TestFilter  # 指定过滤类

搜索过滤

  • 在DRF中REST framework提供了SearchFilter过滤器来帮助我们快速指明数据按照指定字段进行搜索

  • 首先可以导入过滤器

from rest_framework.filters import SearchFilter
  1. 然后在视图类中配置过滤器类
class TestView(ModelViewSet):
    filter_backends = [SearchFilter]  # 配置过滤器类
    search_fields = ['code', 'name'] # 配置搜索字段
  • 以上配置完就可以根据前端传的?search=参数进行code和name的模糊搜索

排序

  • 在DRF中同样有类似的排序过滤器

  • 首先导入过滤类

from rest_framework.filters import OrderingFilter
  1. 然后在视图类中添加排序过滤类
class TestView(ModelViewSet):
    filter_backends = [OrderingFilter]  # 配置排序过滤类
    ordering_fields = ['date'] # 配置排序字段
  • 以上配置完成就可以根据前端传递的?ordering=date参数进行日期排序,当前面加-时是按照日期倒序排列。

Original: https://blog.csdn.net/nothing_may/article/details/121789470
Author: may_mlg
Title: DRF过滤、搜索过滤、排序方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/734346/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球