DRF(filter_backends)

在内置的过滤类中,只能通过search=搜索条件,这种方式进行搜索,条件一=xxx&条件二=xxx
 
第三方过滤模块:django-filter
1.下载模块pip3 install django-filter,一定要注意,在下载第三方模块时,与其有关联的模块可能会跟着一起更新,所以需要检查一下,是否被自动更新至最新版本
 
2.导入该模块
from django_filters.rest_framework import DjangoFilterBackend
 
3.配置在试图类中
filter_backends = [DjangoFilterBackend,]
 
4.配置搜索的字段
filterset_fields = ['搜索条件一', '搜索条件二']
 
5.支持的搜索方式
http://127.0.0.1:8000/访问视图/?搜索条件一=xxx&搜索条件二=xxx
 
6.搜索模式
精准搜索,条件是并且的关系,两个搜索必须精确多一少一都不可,两个只要有一个错误那么就搜索不到

所以我觉得这种搜索并不好,还是自己重写才能对应需求。
 
手搓,自定义过滤类
1.自己写一个类方法,但是必须要继承BaseFilterBackend
 
2.重写某个方法

    def filter_queryset(self, queryset):
        recommend = self.request.GET.get('recommend')
        article_id = self.request.GET.get('article_id')
        user_id = self.request.GET.get('user_id')
        title = self.request.GET.get('title')

        if article_id:
            queryset = queryset.filter(article_id=article_id)
        if user_id:
                       # 这里的queryset是上面的传过来的
            queryset = queryset.filter(user_id=user_id)
        if title:
            #模糊查询 变量__icontains
            queryset = queryset.filter(title__icontains=title)
        if recommend:
            queryset = queryset.filter(recommend=recommend)
        # status = self.request.GET.get('status')
        # if status:
        #     queryset = queryset.filter(status=status)
        # 删除
        return queryset


    def list(self, request, *args, **kwargs):    
            #这里调用我重写的方法。
        queryset = self.filter_queryset(self.get_queryset())


 
3.配置在视图类上
filter_backends = [AsBaseFilterBackend,]
多个过滤类和排序类可以共用,filter_backends=[],可以配置多个,执行顺序是从做往右,所以,放在最左侧的尽量先过滤掉大部分数据

 一、不等于:
除了这个数据:!=
url?id!=1

二、排序:
排序:ordering
url?ordering="-id"

三、模糊查询:
模糊查询不区分大小写:__icontains
模糊查询区分大小写:__contains
url?name__icontains=1



四、精确查询:
模糊查询:__exact
url?name__exact=1


五、查询列表:
查询列表:__in
url?name__in=1


六、判断是否是空:
判断是否是空:__isnull
url?hotel__isnull=true


七、以什么开头和以什么结尾:
以什么结尾:__endswith
以什么开头:__startswith
url?code__endswith=O&__startswith=F



八、大于、小于、等于:
大于:__gt
小于:__lt
小于等于:__lte
大于等于:__gte




九、某年、某月、某天:
某年:__year
某月:__month
某天:__day
星期几:__week_day


十、分页
每页数量:page_size=10
页数:page=1


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值