DestroyAPIView Django 休息验证

Sum*_*ani 1 django django-rest-framework

class DeleteLedgerCategory(DestroyAPIView):
    serializer_class = CategorySerializer
    permission_classes = [IsAuthenticated]

    def get_queryset(self):
        queryset = Category.objects.filter(company = self.request.user.currently_activated_company, id=self.kwargs['pk'])
        return queryset

    def preform_destroy(self, instance):
        if instance.is_default == True:
            raise ValueError("Cannot delete default system category")
        return instance.delete()
Run Code Online (Sandbox Code Playgroud)

在上述基于类的视图中。我需要添加自定义验证错误消息。IE。if instance.is_default == True: raise error... 并且只允许在没有遇到错误的情况下删除实例。如果有任何不清楚的问题。做评论

nev*_*ner 8

您可以在destroy方法中自定义响应,而不仅仅是引发错误:

from rest_framework.response import Response

class DeleteLedgerCategory(DestroyAPIView):
    serializer_class = CategorySerializer
    permission_classes = [IsAuthenticated]

    def get_queryset(self):
        queryset = Category.objects.filter(company = self.request.user.currently_activated_company, id=self.kwargs['pk'])
        return queryset

    def destroy(self, request, *args, **kwargs):
        instance = self.get_object()
        if instance.is_default == True:
            return Response("Cannot delete default system category", status=status.HTTP_400_BAD_REQUEST)
        self.perform_destroy(instance)
Run Code Online (Sandbox Code Playgroud)