如何从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
相关产品推荐
相关产品推荐

