Pydantic中配置extra=Extra.allow后如何获取传入的额外字段?
问题解答
配置了extra = Extra.allow之后可以单独获取所有额外字段,不同Pydantic版本的实现方式如下:
Pydantic V1 实现
Pydantic V1 中,模型实例的__fields_set__属性存储了所有传入后被赋值的字段,__fields__属性存储了模型定义的原生字段,二者做差集即可得到额外字段:
from pydantic import BaseModel as pydanticBaseModel, Extra class BaseModel(pydanticBaseModel): name: str class Config: allow_population_by_field_name = True extra = Extra.allow # 传入测试数据 data = { "name": "Name", "address": "bla bla", "post": "post" } instance = BaseModel(**data) # 计算额外字段集合 extra_fields = instance.__fields_set__ - instance.__fields__.keys() print(extra_fields) # 输出: {'address', 'post'}
Pydantic V2 实现
Pydantic V2 提供了更直接的属性model_extra,会直接存储所有额外字段的键值对,直接取key即可:
from pydantic import BaseModel, ConfigDict class BaseModel(BaseModel): name: str model_config = ConfigDict( populate_by_name=True, extra='allow' ) data = { "name": "Name", "address": "bla bla", "post": "post" } instance = BaseModel(**data) # 直接获取额外字段集合 extra_fields = set(instance.model_extra.keys()) print(extra_fields) # 输出: {'address', 'post'}
内容的提问来源于stack exchange,提问作者Jyotirmay
相关产品推荐
相关产品推荐

