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

如何在Pydantic中区分显式设为默认值与未传入字段?

在Pydantic中区分字段显式设默认值与未传入的情况

当然可以,Pydantic提供了model_fields_set属性来实现这个需求。这个属性会记录所有被显式传入的字段名称,不管你传入的值是不是默认值。

针对你的示例代码,我们可以这样区分:

from pydantic import BaseModel

class Test(BaseModel):
    c: str | None = None

k1 = Test.model_validate({'c': None})
k2 = Test.model_validate({})

# 检查字段是否被显式传入
print('c' in k1.model_fields_set)  # 输出 True,因为显式传了c=None
print('c' in k2.model_fields_set)  # 输出 False,因为没传c字段

原理很简单:

  • 当你显式传递{'c': None}时,c会被加入model_fields_set
  • 当你不传c字段时,Pydantic会自动填充默认值,但不会把c加入model_fields_set

如果是Pydantic v1版本,对应的属性是__fields_set__,用法和v2的model_fields_set完全一致:

# Pydantic v1 写法
print('c' in k1.__fields_set__)  # True
print('c' in k2.__fields_set__)  # False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 20:32:31