zoukankan      html  css  js  c++  java
  • drf 分类过滤与区间过滤

    drf 分类过滤与区间过滤

    分类过滤

    前提:需要安装Django-filter插件

    >: pip install django-filter

    方式一

    使用步骤

    1、在视图文件views.py中导入django-filter的功能组件(过滤必须采用的组件)

    from django_filters.rest_framework import DjangoFilterBackend

    2、将搜索组件配置给有分类过滤需求的视图类的filter_backends字段

    filter_backends = [DjangoFilterBackend]

    3、配置视图类关联的Model表可以分类的字段(通常是可以分组的字段)

    filter_fields = ['course_category']

    4、前台访问该接口,采用拼接参数方式用分类course_category字段将分类条件提供给后台

    http://127.0.0.1:8000/course/free/?course_category=1 # 拿课程分类1下的所有课程

    详细使用

    views.py

    # django-filter插件 分类功能
    from django_filters.rest_framework import DjangoFilterBackend
    class CourseViewSet(GenericViewSet,ListModelMixin):
        queryset = models.Course.objects.filter(is_delete=False,is_show=True).all()
        serializer_class = serializers.CourseSerializer
    
        filter_backends = [DjangoFilterBackend]
    
        # 分类的字段(分组的字段)
        filter_fields = ['course_category']

    方式二

    使用步骤

    1、自定义过滤类继承django-filter插件的FilterSet类,绑定Model表,并设置分类字段

    filter.py

    from django_filters.filterset import FilterSet
    from . import models
    class CourseFilterSet(FilterSet):
      class Meta:
        model = models.Course
        fields = ['course_category']

    2、在视图文件views.py中导入django-filter的功能组件及自定义的过滤类

    from django_filters.rest_framework import DjangoFilterBackend
    from .filters import CourseFilterSet

    3、将搜索组件配置给有分类过滤需求的视图类的filter_backends字段

    filter_backends = [DjangoFilterBackend]

    4、配置视图类关联的自定义过滤类

    filter_class = CourseFilterSet

    5、前台访问该群查接口,采用拼接参数方式用分类course_category字段将分类条件提供给后台

    http://127.0.0.1:8000/course/free/?course_category=1 # 拿课程分类1下的所有课程

    详细使用

    views.py

    from django_filters.rest_framework import DjangoFilterBackend
    from .filters import CourseFilterSet
    class CourseViewSet(GenericViewSet,ListModelMixin):
        queryset = ...
        serializer_class = ...
        filter_backends = [CountFilter]
        # 过滤类
        filter_class = CourseFilterSet

    区间过滤

    使用步骤

    1、自定义过滤类继承django-filter插件的FilterSet类,绑定Model表,并设置自定义区间规则字段

    filter.py

    #django-filter插件过滤类
    from django_filters.filterset import FilterSet
    from . import models
    from django_filters import filters
    class CourseFilterSet(FilterSet):
        # field_name为类里面的字段名,lookup_expr用来设置过滤规则,gte是大于等于/gt是大于
        min_price = filters.NumberFilter(field_name='price',lookup_expr='gte')
        max_price = filters.NumberFilter(field_name='price',lookup_expr='lte')
        class Meta:
            model = models.Course
            # 如果过滤条件仅仅就是Model已有字段,方式一更好
            # 但方式二可以自定义过滤字段
            fields = ['course_category','min_price','max_price']

    2、在视图文件views.py中导入django-filter的功能组件及自定义的过滤类

    from django_filters.rest_framework import DjangoFilterBackend
    from .filters import CourseFilterSet

    3、将搜索组件配置给群查接口视图类的filter_backends字段

    filter_backends = [DjangoFilterBackend]

    4、配置视图类关联的自定义过滤类

    filter_class = CourseFilterSet

    5、前台访问该群查接口,采用拼接参数方式用自定义区间规则字段将区间条件提供给后台

    http://127.0.0.1:8000/course/free/?min_price=30&max_price=60 # 拿课程价格在30~60的所有课程

    详细使用

    views.py

    from django_filters.rest_framework import DjangoFilterBackend
    from .filters import CourseFilterSet
    class CourseViewSet(GenericViewSet,ListModelMixin):
        queryset = ...
        serializer_class = ...
        filter_backends = [CountFilter]
        # 过滤类
        filter_class = CourseFilterSet
  • 相关阅读:
    你的行为合理吗?看看社会心理学给我们的启示。
    如何在Firefox方便的抓取网页上的Flash
    Disable anchor tag的javascript代码(兼容IE和Firefox)
    如何更改DotNetNuke(DNN)的默认语言
    The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
    一寸、两寸证件照photoshop批处理动作
    DotNetNuke(DNN)皮肤制作如何居中内容
    忘记DotNetNuke的host密码?如何恢复丢失的DNN密码
    使用DIIOP必须作的DOMINO手动设置
    Domino中Servlet实现RSS中文乱码问题解决
  • 原文地址:https://www.cnblogs.com/baohanblog/p/12428033.html
Copyright © 2011-2022 走看看