【问题标题】:Cant handle a response error on django-rest-framework无法处理 django-rest-framework 上的响应错误
【发布时间】:2019-10-25 02:48:07
【问题描述】:

当创建公司的用户尝试在我的 API 上创建另一个时,我试图返回 400 个错误的请求响应

我尝试了一个响应但它不起作用,它似乎没有进入 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

【问题讨论】:

    标签: error-handling django-rest-framework response


    【解决方案1】:

    因为 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)
    

    【讨论】:

      猜你喜欢
      • 2015-01-20
      • 2021-01-12
      • 1970-01-01
      • 2019-05-23
      • 2020-06-15
      • 2016-01-20
      • 2017-07-20
      • 2021-05-25
      • 1970-01-01
      相关资源
      最近更新 更多