drf 搜索、过滤字段、排序---学习心得

  • 1. 第一步,views 中导入  filters,
from rest_framework import filters
  •  2.  第二步,方法函数中,用什么功能就引用对应模块 

filter_backends = (DjangoFilterBackend,filters.SearchFilter,filters.OrderingFilter,)

DjangoFilterBackend :过滤字段--------价格范围

filters.SearchFilter     :搜索--------搜索框

filters.OrderingFilter   :排序--------价格从大到小

  •  3.1 搜索:

比如要搜索user表(modle)中的  姓名(name)和年龄(age)

search_fields = ('name', 'age')
  • 3.1.1 搜索有四个功能:

'^' 以指定内容开始.

'=' 完全匹配

'@' 全文搜索(目前只支持Django的MySQL后端)

'$' 正则搜索

如搜索   完全匹配名字,以年龄内容开始

search_fields = ('=name', '^age')
  •  3.2 过滤字段: 

创建一个过滤类,以年龄范围为例,在哪里创建都行,只要导入到你的视图views方法中就行

import django_filters               #导入  django_filters过滤模块 
from .models import User     #导入  引入model自己的表,以User为例 


# 定义过滤类
class UserFilter(django_filters.rest_framework.FilterSet):
    """商品过滤类"""
    age_min = django_filters.NumberFilter(field_name="age", lookup_expr='gte')  
    #要过滤什么字段写什么,以age为例。
    age_max = django_filters.NumberFilter(field_name="age", lookup_expr='lte') 
    #要过滤什么字段写什么,以age为例。

    class Meta:
        model = Goods
        fields = ['age_min ', 'age_max ']  # 在Meta中指定过滤哪些字段
        #要过滤什么字段写什么,以age为例。
  • 导入进视图方法
  • filter_class = UserFilter
  •  3.3 排序字段: 
ordering_fields = ('age')

过滤器中年龄排序,效果和 order_by一样

  • 完整代码
class UserViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
    """搜索、过滤、排序"""
    queryset = User.objects.all().
    serializer_class = UserSerializer   #自己创建序列化器
    filter_backends = (DjangoFilterBackend,
                       filters.SearchFilter,
                       filters.OrderingFilter,)
    filter_class = UserFilter
    search_fields = ('name', 'age')
   
    ordering_fields = ('age')
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值