我正在使用一个 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)
也许您正在寻找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)