Django rest framework 如何在重写.get_queryset()时正确返回错误?
我在DRF文档中读到,您可以通过重写.get\u queryset()来过滤一个查询参数。我正在寻找最佳实践,关于在过滤器不正确的情况下返回什么以及在哪里返回错误消息 我提到的文件是 我在下面包含了源代码Django rest framework 如何在重写.get_queryset()时正确返回错误?,django-rest-framework,django-rest-viewsets,Django Rest Framework,Django Rest Viewsets,我在DRF文档中读到,您可以通过重写.get\u queryset()来过滤一个查询参数。我正在寻找最佳实践,关于在过滤器不正确的情况下返回什么以及在哪里返回错误消息 我提到的文件是 我在下面包含了源代码 class PurchaseList(generics.ListAPIView): serializer_class = PurchaseSerializer def get_queryset(self): """ Optionally res
class PurchaseList(generics.ListAPIView):
serializer_class = PurchaseSerializer
def get_queryset(self):
"""
Optionally restricts the returned purchases to a given user,
by filtering against a `username` query parameter in the URL.
"""
queryset = Purchase.objects.all()
username = self.request.query_params.get('username', None)
if username is not None:
queryset = queryset.filter(purchaser__username=username)
return queryset
感谢您的帮助您可以做到这一点
from rest_framework import status
class PurchaseList(generics.ListAPIView):
serializer_class = PurchaseSerializer
def get_queryset(self):
try:
"""
Optionally restricts the returned purchases to a given user,
by filtering against a username query parameter in the URL.
"""
queryset = Purchase.objects.all()
username = self.request.query_params.get('username', None)
if username is not None:
queryset = queryset.filter(purchaser__username=username)
return queryset
except:
return None
def get(self, request):
try:
data=view_serializer(self.get_queryset(),many=True).data
context = {
"data" : data,
"message" : "Contents returned successfully",
"success" : True
}
return Response(context, status=status.HTTP_200_OK)
except Exception as error:
context = {'error': str(error), 'success': "false", 'message': 'Failed To Get contents.'}
return Response(context, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
如果您的API很严格,并且您需要发送一些关于坏过滤器的消息,那么您可能会引发错误,以便DRF知道如何处理它() 例如:
from rest_framework.exceptions import ValidationError
class PurchaseList(generics.ListAPIView):
serializer_class = PurchaseSerializer
def get_queryset(self):
...
if error:
raise ValidationError(detail='Invalid Params')
如果密钥不正确,请不要返回错误并忽略。如果您担心它会返回太多内容,请使用分页。谢谢您的回答。但是返回400次抛出的服务器错误。你能告诉我错误吗?或者显示它的屏幕截图?它返回
必须先呈现响应内容,然后才能对其进行迭代。
搜索后,我找到了问题的答案,并更新了答案。现在它是正确的。您可以将其标记为正确,以便其他人可以发现它有帮助。感谢您指出,我们无法在get_queryset()中返回响应