一、 多个字段中包含搜索关键字返回
默认情况下,搜索参数被命名为“search”,但这可能会被SEARCH_PARAM设置覆盖。
The search behavior may be restricted by prepending various characters to the search_fields.
可以通过在search_fields中加入一些字符来限制搜索行为,如下:
‘^’ :以xx字符串开始搜索
‘=’ :精确匹配
‘@’ :全文搜索(目前只支持Django的MySQL后端)
‘$’ :正则表达式搜索
用法示例:精确匹配business_id字段
self.search_fields = [‘project_name’, ‘=business_id’]
‘’‘
1、过滤
多个字段中包含搜索关键字返回
http://127.0.0.1:8000/api/v1/test?search=202005181855000139498
’‘’
def get(self, request):
result = {'data': '', 'meta': {'msg': 'OK', 'status': 200}}
try:
'''
1、过滤
多个字段中包含搜索关键字返回
'''
# 导入filters
from rest_framework import filters
# 实例化搜索器
search_class = filters.SearchFilter()
# 查询数据
workorder = WorkOrderInfo.objects.all().order_by('id')
# 指定需要搜索的字段,这些字段包含搜索关键字就返回结果;
# 根据源码,搜索支持模糊匹配,精准匹配,正则匹配等
# 示例为只允许通过 id 和 business_id 和 project_name 模糊搜索
self.search_fields = ['project_name', 'business_id']
# 搜索结果
search_query = search_class.filter_queryset(request, workorder, self)
# 序列化后返回数据
workorder_ser = WorkOrderSerializer(search_query, many=True)
result['data'] = workorder_ser.data
except Exception as e:
print(e)
result['meta']['msg'] = '获取数据失败'
result['meta']['status'] = 500
return Response(result)
通常情况下搜索与分页一起使用