【发布时间】:2021-07-01 19:09:11
【问题描述】:
我有一个 django 模型,我想通过 Django Rest 框架显示它。我正在通过get_queryset() 显示模型中的所有对象。但是,我也有几个 query_params 会过滤掉某些对象。这是我工作正常的主要代码:
class PlanView(generics.ListAPIView):
"""
API endpoint which allows prices to be viewed or edited
"""
serializer_class = PlanSerializer
permission_classes = (IsAuthenticatedOrReadOnly,)
# override method
def get_queryset(self):
//get all objects in Plan model
queryset = Plan.objects.all()
// possible query parameters to be read from url
size = self.request.query_params.get("size", None)
price = self.request.query_params.get("price", None)
if size is not None:
if size == "large":
queryset = queryset.filter(Large=True)
elif size == "small":
queryset = queryset.filter(Large=False)
if price is not None:
queryset = queryset.filter(price=price)
return queryset
用这个urlpattern:
path(r'API/plans', views.PlanView.as_view(), name='prices'),
唯一的问题是,当我有目的地在浏览器中编写下面的 URL 时,
http://127.0.0.1:8000/API/plans?size=sm
如果 query_param 值错误/拼写错误,get_query() 代码将忽略它并显示对象,就好像没有过滤器一样。
我试着写一个 else 语句,例如:
if size is not None:
if size == "large":
queryset = queryset.filter(Large=True)
elif size == "small":
queryset = queryset.filter(Large=False)
else:
return Response({"Error":"bad request"}, status=status.HTTP_400_BAD_REQUEST)
但是有了这个,我收到一条错误消息:
ContentNotRenderedError at /API/plans
The response content must be rendered before it can be iterated over.
如果用户在 API 中输入错误的参数值,我如何显示有用的错误响应/json?
【问题讨论】:
标签: django rest api django-rest-framework http-status-codes