• 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
  • 相关阅读:
    关于标签类的注意事项
    层叠样式表css的优先级
    link常用的作用
    html中属于布尔类型的属性
    行级标签和块级标签的区别
    拥有inline-block属性的标签
    JDK中的Timer和TimerTask详解(zhuan)
    关于 MySQL LEFT JOIN 你可能需要了解的三点(zhuan)
    Logger日志级别说明及设置方法、说明 (zhuan)
    Velocity教程 (zhuan)
  • 原文地址:https://www.cnblogs.com/kaibindirver/p/16848939.html
Copyright © 2020-2023  润新知