Не могу обработать ошибку ответа на django-rest-framework - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь вернуть ответ 400 плохих запросов, когда пользователь с созданной компанией пытается создать еще один на моем API

Я пытался с ответом, но он не работает, кажется, что это не таквведите if

class CompanyViewSet(generics.ListCreateAPIView):
    serializer_class = CompanySerializer
    permission_classes = [permissions.IsAuthenticated]

    def get_queryset(self):
        return UserCompany.objects.filter(owner=self.request.user.id)

    def perform_create(self, serializer):
        queryset = UserCompany.objects.filter(owner=self.request.user.id)

        if queryset.exists():
            content = {'API response error:': 'Can have only a one company for every user'}
            return Response(content, status=status.HTTP_400_BAD_REQUEST)
        else:
            serializer.save(owner=self.request.user)

Когда я создаю компанию в пользователе, у которой уже есть одно возвращаемое состояние 200, но он не создается, я ожидал, что оно вернет состояние 400

1 Ответ

0 голосов
/ 25 октября 2019

Потому что perform_create только сохранить serializer. Если вы хотите получить ответ о статусе управления, вы должны переопределить create. Попробуйте вот так:

def create(self, request, *args, **kwargs):
    queryset = UserCompany.objects.filter(owner=self.request.user.id)
    if queryset.exists():
        content = {'API response error:': 'Can have only a one company for every user'}
        return Response(content, status=status.HTTP_400_BAD_REQUEST)
    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    self.perform_create(serializer)
    headers = self.get_success_headers(serializer.data)
    return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
...