一个接口: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 有没有处理像过滤查询,模糊搜索查询的组件。有没有上面资料指点一下。
1.忘记
all()
,全部用filter()
.filter()
在无条件的时候=all()
2.现在我们需要的是判断是否存在条件.