具体需求说明:
假设请求定义如下,参数bread__gt=100
表示过滤出bread
阅读量大于100的所有书本返回;
请求方式:GET
请求路径: /books/?bread__gt=100
参考文档链接:
drf
官方文档
**注意:**如果没有安装第三方包django-filter
,参数文章DRF基本视图——过滤、排序和分页
进行安装。
1、在views.py
文件中,新建一个对应模型类的过滤器:
# 导包
from django_filters import rest_framework as filters
# 新建一个过滤器
class BookFilter(filters.FilterSet):
bread__gt = filters.NumberFilter(field_name='bread', lookup_expr='gt')
bread__lt = filters.NumberFilter(field_name='bread', lookup_expr='lt')
class Meta:
model = BookInfo # 图书模型类
fields = ['bread__gt', 'bread__lt']
2、在图书视图函数内,指定自定义的过滤器
# 图书视图接口
class BooksView(ModelViewSet):
queryset = BookInfo.objects.all()
serializer_class = BookInfoModelSerializer
# 指定使用django-filter后端
filter_backends = (filters.DjangoFilterBackend,)
# 指定自定义的过滤器
filterset_class = BookFilter
3、在配置文件settings.py文件中,配置django过滤后端:
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': (
'django_filters.rest_framework.DjangoFilterBackend',
),
4、测试结果: