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 表示字段是否曾被显式提供,不表示字段当前值是否等于默认值。创建模型实例后,修改字段也可能改变这个集合。如果要判断原始输入是否包含某个字段,请在修改实例前检查。
备注:内容仅供参考。
