Я пытаюсь частично обновить модель и перезаписать метод 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())