一个接口:http://127.0.0.1:8000/api/v1/course/ 对应的处理视图如下
class CourseView(APIView): # renderer_classes = [JSONRenderer,] def get(self, request, *args, **kwargs): ret = {"code": 1} try: queryset = models.Course.objects.all() ser = CourseSerializer(instance=queryset, many=True) ret["data"] = ser.data except Exception as e: ret["code"] = 0 ret["msg"] = "获取数据失败" return Response(ret)
该接口是不带参数的,返回的也是.all()全部的数据。
那么问题来了,如果我要写一个接口 api/products/,这个接口呢,假如有三个非必填参数,比如
产品名称:name(可以模糊查询),产品类型:type;生产时间:time。
如果一个参数都不带,name就返回 .all()全部数据,
这个问题该如何处理呢?
我现在的想法是:
1/判断是否带参数 若果不带参数,就返回.all()
2/如带了一个或多个参数,就用.filter(key1 = value1,key2=value2 ...)这样的形式去查数据。
思考了一下,如果以这样的形式去判断参数逻辑是否太复杂?或者我这样的想法是错误的。因为serializer,比如上面的CourseSerializer对象instance参数需要传入的是一个.all()的queryset对象。
restframework 有没有处理像过滤查询,模糊搜索查询的组件。有没有上面资料指点一下。
拉风的咖菲猫
相关分类