• 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
  • 相关阅读:
    (转载)C#如何在任务管理器中不显示指定的窗体
    Windows上配置Mask R-CNN及运行示例demo.ipynb
    如何选择普通索引和唯一索引?
    relay(跳板机)搭建
    javascript 9x9乘法口诀表
    canvas画布爆炸
    Chrome Network Timing 解释
    JavaScript中对数组的定义
    jquery each 和 map 区别
    css 兼容性转换网站
  • 原文地址:https://www.cnblogs.com/baohanblog/p/12428033.html
Copyright © 2020-2023  润新知