一、 简单搜索与分页实战
多个字段中包含搜索关键字返回
http://127.0.0.1/api/v1/release/projectinfo?query=tian
’‘’
def get(self, request):
result = {'count': '', 'pagenum': 1, 'data': '', 'meta': {'msg': 'OK', 'status': 200}}
try:
# 根据参数:query 是否为空判断如何查询,为空全量查询,否则进行过滤
search_words = request.query_params.get('query').strip()
if search_words is not None:
# 使用Q对象进行关键字条件查询
condition = Q(name__icontains=search_words) | Q(service_type__icontains=search_words) | Q(
owner__icontains=search_words)
project = Project.objects.filter(condition)
else:
project = Project.objects.all().order_by('id')
# 分页实现
count = project.count()
# 创建对象
pg = MyPagination()
# 获取分页数据
page_query = pg.paginate_queryset(queryset=project, request=request, view=self)
# 序列化数据
project_ser = ProjectSerializer(page_query, many=True)
result['data'] = project_ser.data
result['count'] = count
except Exception as e:
logger.error(e)
result['meta']['msg'] = '获取数据失败'
result['meta']['status'] = 500
return Response(result)
补充django 中的 Q对象
通过符号:&(且) | (或) ~(非) 处理不同的情况。
参考:https://www.jianshu.com/p/848bfc02c2a9