PAYATHON 2026

Pydantic 如何区分显式设置默认值与未提供字段?

数据小陈

结论

可以用 Pydantic 模型实例的 model_fields_set 判断字段在创建或验证时是否由输入显式提供。下面的代码中,k1.model_fields_set 包含 c,k2.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
print('c' in k2.model_fields_set)  # False

model_fields_set 保存输入数据显式提供的字段名。因此,即使 k1.c 与默认值相同,仍可以看出输入中包含了 c。k2.c 也是 None,但输入中没有 c。

注意事项

model_fields_set 表示字段是否曾被显式提供,不表示字段当前值是否等于默认值。创建模型实例后,修改字段也可能改变这个集合。如果要判断原始输入是否包含某个字段,请在修改实例前检查。

备注:内容仅供参考。