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