如何在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
相关产品推荐
相关产品推荐

