如何在Pydantic模型验证器中获取排除指定字段的JSON
解决方案
可以通过以下方式实现需求:利用已验证的字段值创建临时模型实例,再通过模型自带的json()方法生成排除field4后的序列化字符串,最后与field4的值对比。
修改后的完整代码如下:
from pydantic import BaseModel, validator, ValidationError # 根据实际情况导入ObjectIdField,比如from bson import ObjectId as ObjectIdField class Input(BaseModel): field1: ObjectIdField = ... field2: str = ... field3: int = ... field4: str = ... @validator('field4') def validate_field4(cls, v, values, **kwargs): # 用已验证的前置字段创建临时实例 temp_instance = cls(**values) # 生成排除field4的JSON字符串,自动应用Config中的编码器 expected_json = temp_instance.json(exclude={'field4'}) if expected_json != v: raise ValidationError("field4必须与其他字段的JSON字符串匹配") return v class Config: json_encoders = { ObjectIdField: lambda v: str(v), }
关键说明:
values参数包含了当前已验证完成的所有前置字段值(因为field4是最后一个字段,所以field1/field2/field3都已验证通过),用它创建临时实例能保证字段值的合法性- 模型的
json()方法会自动遵循Config中定义的json_encoders规则,把ObjectId转换为字符串,避免直接用json.dumps()导致的序列化错误 - 使用Pydantic自带的
ValidationError替代普通Exception,能更好地融入Pydantic的验证体系,返回更规范的错误信息
内容的提问来源于stack exchange,提问作者milad_vayani
相关产品推荐
相关产品推荐

