Pydantic V2自定义额外字段禁止的验证错误消息不生效问题排查求助
Pydantic V2自定义额外字段禁止的验证错误消息不生效问题排查求助
我用Pydantic V2定义了下面这个模型:
from pydantic import BaseModel, ConfigDict class Data(BaseModel): valid: bool = False name: str | None = None model_config = ConfigDict(extra="forbid")
当我用model_validate验证带额外字段的数据时:
Data.model_validate({"valid": True, "name": "John", "age": 30})
会触发预期的验证错误,默认提示信息是Extra inputs are not permitted:
pydantic_core._pydantic_core.ValidationError: 1 validation error for Data age Extra inputs are not permitted [type=extra_forbidden, input_value=30, input_type=int] For further information visit https://errors.pydantic.dev/2.10/v/extra_forbidden
我想把这个默认提示改成自定义的Unknown field.,于是重写了model_validate方法来定制错误消息,修改后的模型如下:
from pydantic import BaseModel, ConfigDict from pydantic_core import InitErrorDetails, ValidationError class Data(BaseModel): valid: bool = False name: str | None = None model_config = ConfigDict(extra="forbid") # 禁止额外字段 @classmethod def model_validate(cls, value): try: return super().model_validate(value) except ValidationError as e: modified_errors = [] for error in e.errors(): if error['type'] == 'extra_forbidden': modified_errors.append( InitErrorDetails( type=error['type'], loc=error['loc'], input=error['input'], ctx={"error": "Unknown field."} # 尝试在ctx中设置自定义消息 ) ) else: modified_errors.append(error) raise ValidationError.from_exception_data( title="Validation failed", line_errors=modified_errors )
但运行同样的验证代码后,错误消息还是没有变成我想要的Unknown field.,请问我的这个验证器写法哪里出问题了?
备注:内容来源于stack exchange,提问作者Mehdi Ben Hamida
相关产品推荐
相关产品推荐

