drf-过滤器

https://www.bilibili.com/video/BV1z64y197Dk?p=19&vd_source=caabcbd2a759a67e2a3de8acbaaf08ea

 

依赖库安装

django-filter==22.1

 

setting.py

INSTALLED_APPS = [
       'django_filters',
]

#全局drf配置
REST_FRAMEWORK={
    # 过滤器
    'DEFAULT_FILTER_BACKENDS':('django_filters.rest_framework.DjangoFilterBackend',),
}

 

可以

https://blog.csdn.net/weixin_45373278/article/details/126455879

 

模糊筛选

http://t.zoukankan.com/telecasterfanclub-p-13290028.html

 

自定义筛选、筛选区间、模糊匹配啥的

http://t.zoukankan.com/telecasterfanclub-p-13290028.html

 

筛选、区间筛选

http://t.zoukankan.com/guapitomjoy-p-12002755.html

 

上面哪些我都没试过1,有空再试试看

 

--------上面全局设置的我没成功----下面的我成功了

view

from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters
class BookView(ModelViewSet):
    queryset = Member.objects.all()
    serializer_class = BookSerializers
    filter_backends = (filters.SearchFilter,DjangoFilterBackend,filters.OrderingFilter,)  # 指定过滤器
    search_fields = ('name','sex',)  # 搜索的字段 ?search=123  注意单个字段 要加个,
    filterset_fields = ('name',) #指定可搜索的字段 ?name=123
    ordering_fields = ("id",) #?ordering=-id

 

模糊查询见 : https://www.cnblogs.com/elijah-li/p/16128524.html (成功了)

view

//自定义过滤
from rest_framework.filters import BaseFilterBackend
from django.db.models import Q


class Myfilter(BaseFilterBackend):
    def filter_queryset(self, request, queryset, view):
        # 获取过滤参数
        qs_name = request.query_params.get('name')
        qs_price = request.query_params.get('price')
        # title__contains:精确大小写查询,SQL中-->like BINARY
        # 利用Q查询构造或关系
        if qs_name:
            queryset = queryset.filter(name__contains=qs_name)
        elif qs_price:
            queryset = queryset.filter(price__contains=qs_price)
        elif qs_name or qs_price:
            queryset = queryset.filter(Q(name__contains=qs_name) | Q(price__contains=qs_price))
        return queryset
    
    
    
 //视图类  
from app01.filter import Myfilter


class BookViewSet(ViewSetMixin, ListAPIView):
    queryset = models.Book.objects
    serializer_class = BookModelSerializer
    authentication_classes = [LoginAuth, ]
    filter_backends = [Myfilter, ]    #指定过滤器
    filterset_fields = ('name',)  # 指定可搜索的字段 ?name=123

 

posted @   凯宾斯基  阅读(80)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2021-11-01 给按钮加loading效果 等效果
2021-11-01 java 的 try catch
2019-11-01 java.net.NoRouteToHostException: Cannot assign requested address 问题分析(端口被用完的解决方法)
2019-11-01 python读写csv文件的方法(还没试,先记录一下)
2019-11-01 python 判断文件是否存在和删除文件的api (其中判断文件在不在让想起这个可以强兼容jenkins工作目录那个问题)
2017-11-01 关于requests的session方法保持不了cookie的问题。(seesion的意思是保持一个会话,比如 登陆后继续操作(记录身份信息) 而requests是单次请求的请求,身份信息不会被记录)
点击右上角即可分享
微信分享提示