You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:24:04