Сериализатор в методе патча не проверяет поля - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь частично обновить модель и перезаписать метод patch. Он отлично работает, когда я отправляю правильные данные, но моя проблема в том, что когда я отправляю неправильные данные, сериализатор остается True, и я все равно получаю код состояния 200, и ничего не обновляется. Под неверными данными я имею в виду неправильные названия полей. Я мог бы отправить любое имя поля и получить код состояния 200. Поэтому я думаю, что поля не проверяются сериализатором ...

class BuildingUpdateAPI(UpdateAPIView):
    serializer_class = BuildingSerializer

    def patch(self, request, *args, **kwargs):
        """Patches building."""

        building = buildings.get(name=self.kwargs['name_building'])
        serializer = BuildingSerializer(building, data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(status=200, data=serializer.data)
        return JsonResponse(status=400, data="Wrong data provided")

сериализатор:


class BuildingSerializer(serializers.ModelSerializer):
    """Serializer for Buildings."""

    class Meta:
        model = Building
        fields = (
            "id",
            "name",
            "...",
            .....

Теперь мне интересно, так ли это по дизайну или я делаю что-то не так на мой взгляд. Я думал, что могу перезаписать метод validate в сериализаторе, но моя модель имеет довольно много полей ... Так что мне пришлось бы проверять каждое поле по отдельности, что, на мой взгляд, не оптимально. Или есть способ сделать это как-то элегантно?

Я патчил вот так:

result = requests.request("patch", url=endpoint, json=payload, headers=get_headers())
...