按调用更改pydantic的'extra='行为
我想定义一个pydantic的BaseModel,并设置extra='forbid',这样在某些特定的地方可以验证那些我知道会有额外字段的对象,同时在没有指定的情况下仍然禁止额外字段,这样可以吗?
如果不行,那有什么简洁或者普遍推荐的方法呢?是用中间类?在模型上定义类方法?类型适配器?还是实用的转换函数?
我对这些都感兴趣,虽然我具体的情况是处理pydantic和sqlmodel对象在数据库中进出,以及有和没有相关模型的情况。
我希望能有类似这样的东西:
class NoExtras(BaseModel)
model_config = Dict(
extra='forbid',
)
name:str
somedict = dict(name='aname', extra_field='astring')
validated = NoExtras.model_validate(somedict, allow_extra=True)
1 个回答
0
从pydantic版本2.6.4开始,你不能在每次调用时单独修改extra
的行为。不过,你可以简单地从输入中去掉多余的字段,这样就能达到类似的效果:
validated = NoExtras.model_validate({key:value for key,value in somedict.items() if key in NoExtras.model_fields})
需要注意的是,这种方法只适用于简单的模型。