django rest framework 之过滤

一、 多个字段中包含搜索关键字返回
默认情况下,搜索参数被命名为“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)

通常情况下搜索与分页一起使用

你可能感兴趣的:(django,Python)