Django filter

Django filter

在 rest framework 中使用 Django filter 可以很容易的对查询结果进行过滤

直接使用

可以直接指定 model 中的字段以及筛选参数

from django_filters.rest_framework import FilterSet
from rest_framework.viewsets import GenericViewSet
from rest_framework import mixins


class BookFilterSet(FilterSet):
    class Meta:
        model = Book
        fields = {
            'name': ['exact', 'icontains'],
            'status': ['exact', 'in'],
        }

class BookViewSet(mixins.ListModelMixin, GenericViewSet):
	serializer_class = BookSerializer
    queryset = Book.objects.filter().order_by('-create_time')
    filterset_class = BookFilterSet

使用的时候和 QuerySet 的 filter 类似:

?/name__icontains=书&status=1,2

自定义

可以对筛选进行自定义

from django_filters.rest_framework import FilterSet


class BookFilterSet(FilterSet):
    class Meta:
        model = Book
        fields = {
            'name': ['exact', 'icontains'],
            'status': ['exact', 'in'],
        }

    custom_filter = filters.CharFilter(help_text='自定义筛选', method="custom_filter")

    def custom_filter(self, queryset, _, value):
    	# 一些筛选逻辑 ...
	    return queryset

使用方法;

?/custom_filter=1

posted on 2021-01-30 16:42  doubtful  阅读(119)  评论(0编辑  收藏  举报

导航