我想在DRF generic.ListView
中为我的查询集使用url变量,
但是我现在仍然可以验证这一点,我想知道如何验证
我编写了以下代码,但不起作用。
class VideoView(generics.ListAPIView):
def validate(self):
print("ejra")
if "class" not in self.request.GET:
return Response({"error": "class should exist"}, status=status.HTTP_400_BAD_REQUEST)
if len(Class.objects.filter(pk=self.request.GET["class"])) < 1:
return Response({"error": "class not found"}, status=status.HTTP_400_BAD_REQUEST)
def get_queryset(self):
self.validate()
class_obj = Class.objects.get(pk=self.request.GET["class"])
queryset = Video.objects.filter(study_class=class_obj).order_by("-date")
return queryset
serializer_class = VideoSerializer
答案 0 :(得分:2)
您可以通过 DRF API ValidationError
方法本身来提高 validate()
,
from rest_framework.exceptions import ValidationError
class VideoView(generics.ListAPIView):
serializer_class = VideoSerializer
def validate(self):
if "class" not in self.request.GET:
raise ValidationError({"error": "class should exist"})
if Class.objects.filter(pk=self.request.GET["class"]).exists():
raise ValidationError({"error": "class not found"})
def get_queryset(self):
self.validate()
class_obj = Class.objects.get(pk=self.request.GET["class"])
queryset = Video.objects.filter(study_class=class_obj).order_by("-date")
return queryset
ValidationError()
异常引发错误exists()
方法检查是否存在任何对象。len()
函数检查Django查询集的 count() ,这是非常非常糟糕的做法。