过滤器使用有三种方法,都需要配置setting.py中 如下:
# 过滤器默认后端
'DEFAULT_FILTER_BACKENDS': [
'django_filters.rest_framework.DjangoFilterBackend'
],
第一种方法:使用django-filter
待定未更新
第二种方法:自定义过滤器
待定未更新
DRF自带的过滤器方法
DRF自带了具有过滤功能的SearchFilter类,其使用场景与Django-filter的单字段过滤略有不同,更侧重于使用一个关键词对模型的某个字段或多个字段同时进行搜索。
使用这个类,你还需要指定search_fields, 具体使用方式如下:
from rest_framework import filters
class BaiduListApi(CreateModelMixin, ListModelMixin, GenericAPIView):
# 单一过滤器(同时搜索多个字段值)
filter_backends = (filters.SearchFilter,)
search_fields = ['title', 'news_text']
发送GET请求到/v1/articles?page=1&search=django, 你将得到如下结果。注意:这里进行搜索查询的默认参数名为?search=xxx。
SearchFilter类非常有用,因为它不仅支持对模型的多个字段进行查询,还支持ForeinKey和ManyToMany字段的关联查询。按如下修改search_fields, 就可以同时搜索标题或用户名含有某个关键词的文章资源列表。修改好后,作者用户名里如果有django,该篇文章也会包含在搜索结果了。
search_fields = (‘title’, ‘author__username’)
默认情况下,SearchFilter类搜索将使用不区分大小写的部分匹配(icontains)。你可以在search_fields中添加各种字符来指定匹配方法。
'^'开始 - 搜索。
'='完全匹配。
'@'全文搜索。
'$'正则表达式搜索。
例如:search_fields = (‘=title’, )精确匹配title。
参考来源:https://blog.csdn.net/weixin_42134789/article/details/112793235