Как я могу проверить переменную URL в DRF (Django Rest Framework) generic.ListView? - PullRequest
2 голосов
/ 17 мая 2019

Я хочу использовать переменные URL для моего набора запросов в DRF generic.ListView, но я могу подтвердить, что в любом случае теперь я хочу знать, как можно проверить, что

Я написал следующий код, но он не работает.

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

1 Ответ

2 голосов
/ 17 мая 2019

Вы можете повысить DRF API ValidationError из самого метода validate(),

<b>from rest_framework.exceptions import ValidationError</b>


class VideoView(generics.ListAPIView):
    serializer_class = VideoSerializer

    def validate(self):
        if "class" not in self.request.GET:
           <b> raise ValidationError({"error": "class should exist"})
        if Class.objects.filter(pk=self.request.GET["class"]).exists():
            raise ValidationError({"error": "class not found"})</b>

    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

NOTES

  1. ИСПОЛЬЗОВАТЬ DRF ValidationError() исключение для выдачи ошибки
  2. Использовать Django Queryset's exists()метод проверки наличия каких-либо объектов.
  3. Никогда и никогда использование len() функции для проверки счетчика () из Django Queryset, это очень и очень плохая практика.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...