filter 查询过滤
class TestFilter(rest_framework.FilterSet):
# field_name 是数据库字段
# lookup_expr 查询模式
a = rest_framework.CharFilter(field_name='a', lookup_expr='contains')
b = rest_framework.CharFilter(field_name='b', lookup_expr='contains')
c = rest_framework.CharFilter(field_name='c', lookup_expr='contains')
d = rest_framework.CharFilter(field_name='d', lookup_expr='iexact')
class Meta:
model = TestModel
fields = ('a', 'b', 'c', 'd')
- iexact:表示精确匹配, 并且忽略大小写
- icontains:表示模糊查询(包含),并且忽略大小写
- exact:表示精确匹配
- gte:用于规定范围,大于等于
- lte: 用于范围,小于等于
分页
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 5,
}
# 可以重写
class BasePageNumberPagination(PageNumberPagination):
page_query_param = 'current'
class MyPageNumberPagination(BasePageNumberPagination):
page_size = 10
page_size_query_param = 'num'
max_page_size = 50
ordering = '-create_time'
pre_count = 0 # 预先已经知道总条数大小
'DEFAULT_PAGINATION_CLASS': 'xxx.xxx.MyPageNumberPagination',
view
class Test(GenericAPIView):
queryset = ...
filter_backends = [DjangoFilterBackend]
filter_class = TestFilter
# 模糊查询
search_fields = ('a', 'v', 'b', 'x', 'aa', 'cc', 'dd')
def get(self, request):
"""
测试列表
:param request:
:return:
"""
search_filter = filters.SearchFilter()
queryset = self.get_queryset()
search_queryset = search_filter.filter_queryset(request=request, queryset=queryset, view=self)
filter_queryset = self.filter_queryset(search_queryset)
return JsonResponse(request, filter_queryset, self.get_serializer)