DRF Viewset - Возвращает 400, если объект существует, и 200, если не существует
Используя Django Rest Framework, я пытаюсь создать конечную точку API для определения того, существует ли уже заданное имя элемента.
 Если существует, то мы должны сообщить об этом фронтенд-приложению, вернув 400 Bad Request. Если его не существует, то мы посылаем положительный запрос 200 OK.
 Я обнаружил, что могу отправить 400, но если товара не существует, я получаю сообщение 404, с которым ничего не могу сделать.
views.py
from rest_framework import viewsets,status
from rest_framework.response import Response
from .serializers import *
class ItemCheckViewSet(viewsets.ModelViewSet):
    """
    The views that are returned when we peform checks against the items
    """
    lookup_field = 'name'
    queryset = Item.objects.all()
    def get_serializer_class(self):
        return ItemSerializer
    def retrieve(self, request, *args, **kwargs):
        instance = self.get_object()
        serializer = self.get_serializer(instance)
        if len(serializer.data) > 0:
            return Response("Item already exists", status.HTTP_400_BAD_REQUEST)
        return Response("Item does not exist", status.HTTP_200_OK)
serializers.py
from rest_framework import serializers
from .models import Item
class ItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Item
        fields = "__all__"
                
Вы можете сделать это, переопределив метод get_object. По умолчанию этот метод использует get_object_or_404(queryset, **filter_kwargs). Когда этот метод не может найти объект, возникает ошибка Http404 и возвращается код состояния 404. Но вы должны быть внимательны к другим запросам, например post, put. Эти действия также спрашивают об объекте обычным методом get_object
 Нет необходимости в сериализации, если объект существует, и вы можете просто проверить, был ли поднят Http404 из get_object:
from django.http import Http404
class ItemCheckViewSet(viewsets.ModelViewSet):
    ...
    def retrieve(self, request, *args, **kwargs):
        try:
            instance = self.get_object()
        except Http404:
            return Response("Item does not exist", status.HTTP_200_OK)
        return Response("Item already exists", status.HTTP_400_BAD_REQUEST)