You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Django REST的DeleteLedgerCategory视图添加自定义验证错误信息

解决DRF中删除默认分类时的规范错误提示问题

你这里有两个关键需要修正的地方,一个是方法名的拼写错误,另一个是用DRF规范的异常替代普通ValueError,这样返回的错误响应才符合REST API标准:

步骤1:导入DRF专属的验证异常

首先需要引入DRF专门提供的ValidationError,它会被框架自动处理成标准的JSON错误响应:

from rest_framework.exceptions import ValidationError

步骤2:修正方法名并替换异常类型

注意你的代码里方法名写错了——是perform_destroy而不是preform_destroy,这个拼写错误会导致这个方法根本不会被DRF调用!然后把ValueError换成ValidationError,可以自定义清晰的错误信息:

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 perform_destroy(self, instance):
        if instance.is_default:
            # 用DRF的ValidationError替代ValueError,返回标准错误响应
            raise ValidationError(detail="Cannot delete default system category", code="cannot_delete_default_category")
        return instance.delete()

为什么这么改?

  • 普通的ValueError会触发DRF的500服务器错误响应,这对API客户端不友好,也不符合REST规范;
  • DRF的ValidationError会被框架捕获,自动返回400 Bad Request状态码,响应体是标准的JSON格式:
    {
        "detail": "Cannot delete default system category"
    }
    
  • 你还可以通过code参数自定义错误码,方便客户端做针对性的错误处理。

内容的提问来源于stack exchange,提问作者Suman Astani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:36:10