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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:35:27