【问题标题】:Pydantic field does not take valuePydantic 领域没有价值
【发布时间】:2022-09-23 21:21:02
【问题描述】:

在尝试命名 Pydantic 字段 schema 时,我收到以下错误:

NameError: Field name \"schema\" shadows a BaseModel attribute; use a different field name with \"alias=\'schema\'\".

the documentation 之后,我尝试使用别名来避免冲突。请参见下面的代码:

from pydantic import StrictStr, Field
from pydantic.main import BaseModel    

class CreateStreamPayload(BaseModel):
          name: StrictStr
          _schema: dict[str: str] = Field(alias=\'schema\')

在尝试以下列方式实例化 CreateStreamPayload 时:

a = CreateStreamPayload(name= \"joe\",
            _schema= {\"name\": \"a name\"})

结果实例只有name 的值,没有别的。

a.dict()
{\'name\': \'joe\'}

这对我来说完全没有意义,有人可以解释发生了什么吗?

非常感谢

  • 前导下划线表示 Python 中的私有字段。我建议附加它:schema_: ...
  • 谢谢@MaximilianBurszley,它似乎奏效了。如果你愿意回答这个问题,我会接受。

标签: python pydantic


【解决方案1】:

来自the documentation

以下划线开头的类变量和带有typing.ClassVar 注释的属性将自动从模型中排除。

一般来说,附加下划线以避免冲突,因为前导下划线被视为 dunder(魔术)成员或私有成员:_schemaschema_

【讨论】:

    猜你喜欢
    • 2020-08-07
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2022-10-02
    • 1970-01-01
    • 2016-03-29
    • 2015-08-06
    • 1970-01-01
    相关资源
    最近更新 更多