我可以使用“unaliased”属性名称初始化 pydantic 模型吗?

lar*_*sks 5 python pydantic

我正在使用一个 API,其中创建组的模式有效:

class Group(BaseModel):
  identifier: str
Run Code Online (Sandbox Code Playgroud)

我希望我可以这样做:

class Group(BaseModel):
  groupname: str = Field(..., alias='identifier')
Run Code Online (Sandbox Code Playgroud)

但使用该配置,无法使用 name 设置属性值groupname。也就是说,运行失败并出现field required错误:

>>> g = Group(groupname='foo')
pydantic.error_wrappers.ValidationError: 1 validation error for Group
identifier
  field required (type=value_error.missing)
Run Code Online (Sandbox Code Playgroud)

是否可以使用别名或实际属性名称来设置属性值我希望这两个是等价的:

>>> Group(identifier='foo')
>>> Group(groupname='foo')
Run Code Online (Sandbox Code Playgroud)

Her*_*cón 7

也许您正在寻找allow_population_by_field_name配置选项

别名字段是否可以由模型属性给出的名称以及别名填充(默认值False:)

from pydantic import BaseModel, Field


class Group(BaseModel):
    groupname: str = Field(..., alias='identifier')

    class Config:
        allow_population_by_field_name = True


print(repr(Group(identifier='foo')))
print(repr(Group(groupname='bar')))
Run Code Online (Sandbox Code Playgroud)

输出:

Group(groupname='foo')
Group(groupname='bar')
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这现在将在“pydantic”V2 中引发“UserWarning”。您应该使用“populate_by_name”来代替。[来源](https://docs.pydantic.dev/latest/api/config/#pydantic.config.ConfigDict.populate_by_name) (2认同)