drf 第三方 filter

安装第三方包

pip install django-filter

过滤1

view

from django_filters.rest_framework import DjangoFilterBackend

class BlogView(ModelViewSet):
    queryset = models.Blog.objects.order_by('-id').all()
    # serializer_class = BlogModelSerializer
    pagination_class = MyPageNumberPagination
    filter_backends = [DjangoFilterBackend, ]
    # 为表里面的字段,只能精确的查询
    filterset_fields = ['id', 'title']

结果

image

过滤2

自定义过滤器

from django_filters import rest_framework as filters

class MyFilter(filters.FilterSet):
    # 大于等于
    min_id = filters.NumberFilter(field_name='id', lookup_expr='gte')
    # 小于等于
    max_id = filters.NumberFilter(field_name='id', lookup_expr='lte')
    # 等于
    name = filters.CharFilter(field_name='title', lookup_expr='exact')
    # 不等于
    name_n = filters.CharFilter(field_name='title', lookup_expr='exact', exclude=True)
    # 包含
    name_c = filters.CharFilter(field_name='title', lookup_expr='contains')
    # 开头
    name_s = filters.CharFilter(field_name='title', lookup_expr='startswith')

    class Meta:
        model = models.Blog
        fields = ['min_id','max_id']

view

class BlogView(ModelViewSet):
    queryset = models.Blog.objects.order_by('-id').all()
    # serializer_class = BlogModelSerializer
    pagination_class = MyPageNumberPagination
    filter_backends = [filters.DjangoFilterBackend, ]
    filterset_class = MyFilter

结果

image

posted @ 2022-10-14 09:30  Sherwin_szw  阅读(44)  评论(0)    收藏  举报