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

 

posted @ 2020-03-06 18:08  Hank·Paul  阅读(707)  评论(0编辑  收藏  举报