重写 .get_queryset() 时如何正确 return 错误?
How to properly return error when overriding .get_queryset()?
我在 DRF 文档上读到,您可以通过覆盖 .get_queryset() 再次过滤查询参数。我正在寻找最佳实践,关于 return 的最佳做法,以防过滤器不正确以及 return 错误消息的位置。
我参考的文档是here
我在下面包含了源代码
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 知道如何处理它 (docs)
例如:
from rest_framework.exceptions import ValidationError
class PurchaseList(generics.ListAPIView):
serializer_class = PurchaseSerializer
def get_queryset(self):
...
if error:
raise ValidationError(detail='Invalid Params')
我在 DRF 文档上读到,您可以通过覆盖 .get_queryset() 再次过滤查询参数。我正在寻找最佳实践,关于 return 的最佳做法,以防过滤器不正确以及 return 错误消息的位置。
我参考的文档是here 我在下面包含了源代码
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 知道如何处理它 (docs) 例如:
from rest_framework.exceptions import ValidationError
class PurchaseList(generics.ListAPIView):
serializer_class = PurchaseSerializer
def get_queryset(self):
...
if error:
raise ValidationError(detail='Invalid Params')