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

如何从DRF的ErrorDetail中提取code字段?

从DRF的ErrorDetail中提取code字段

你的需求是从DRF的ErrorDetail对象里提取code字段,当前使用的代码如下:

def get_error_message(serializer):
    default_errors = serializer.errors
    message = {}
    for field_name, field_errors in default_errors.items():
        error = [field_error[:] for field_error in field_errors]
        message[field_name] = field_errors[0]
    return message

打印field_errors时输出为:

[ErrorDetail(string='This field may not be blank.', code='blank')]

你能提取string内容,但尝试用field_errors[1]获取code时触发了索引错误。

解决方法

ErrorDetail是DRF的实例对象,不是列表或元组,不能通过索引访问属性。它的code是对象的直接属性,通过.code即可获取。

修改后的代码示例:

def get_error_message(serializer):
    default_errors = serializer.errors
    message = {}
    for field_name, field_errors in default_errors.items():
        first_error = field_errors[0]
        # 可根据需求选择只存code,或者同时存消息和code
        message[field_name] = {
            'message': str(first_error),
            'code': first_error.code
        }
    return message

如果只需要提取code字段,直接赋值即可:

message[field_name] = first_error.code

说明

field_errors是包含ErrorDetail对象的列表,field_errors[0]拿到的是单个ErrorDetail实例。之前用field_errors[1]报错,是因为列表中只有一个元素,索引1不存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:10:26