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

如何为Pydantic Union中的各类型分配不同的Field约束?

给Pydantic Union类型分配专属Field约束的方法

要实现Union中不同类型用不同Field约束,直接给整个Union加Field是不行的(会把约束套给所有类型),正确的做法是用Annotated给每个联合类型单独绑定Field规则:

示例代码

from pydantic import BaseModel, Field, Annotated

class FooDetail(BaseModel):
    baz: int
    fob: float

class Foo(BaseModel):
    # 仅给str类型绑定pattern约束,FooDetail不受该约束影响
    bar: Annotated[str, Field(pattern=r'[bar]+')] | FooDetail

验证逻辑说明

  • 当传入字符串类型的bar时,Pydantic会自动应用pattern=r'[bar]+'的校验规则,只有由b/a/r组成的字符串才会通过
  • 当传入符合FooDetail结构的字典/实例时,会按照FooDetail的模型规则校验,完全不受str的Field约束影响

测试案例

  • 合法字符串:Foo(bar="barrr") → 验证通过
  • 非法字符串:Foo(bar="abc") → 触发pattern校验错误
  • 合法FooDetail实例:Foo(bar={"baz": 3, "fob": 5.5}) → 验证通过

内容的提问来源于stack exchange,提问作者rrauenza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:32:04