如何抛出含嵌套字典的ValidationError?遇error_list不存在报错
关于ValidationError嵌套字典错误信息的问题
当然可以抛出带有嵌套字典结构的ValidationError,但你的写法不符合Django ValidationError的规范,才会出现'ValidationError' object has no attribute 'error_list'的报错。
问题原因
ValidationError接收的错误结构,要求每个层级的错误值要么是字符串、错误信息列表,要么是另一个ValidationError实例。你直接传入了三层普通字典,ValidationError无法将这种结构正确解析为内置的错误列表(即error_list属性),导致后续处理时找不到该属性报错。
解决办法
通过嵌套ValidationError实例来构建层级错误结构,每个内层的字典都用ValidationError包裹,这样每个层级的错误都会被正确解析,生成对应的error_list。示例代码如下:
from django.core.exceptions import ValidationError raise ValidationError({ "index_errors": ValidationError({ "index1": ValidationError({ "test_con": "Error text example", "test_con2": "Error text example2" }) }) })
这样抛出的ValidationError不仅保留了你需要的嵌套字典结构,还会正确生成error_list属性,避免报错。如果后续需要遍历或处理错误信息,每个层级的ValidationError都可以通过error_list或message_dict来访问对应的错误内容。
内容的提问来源于stack exchange,提问作者pikk
相关产品推荐
相关产品推荐

