为可选字段创建带有别名的pydantic模型

4

创建带有别名的强制字段的Pydantic模型的方法如下:

class MedicalFolderUpdate(RWModel):
    id : str = Field(alias='_id')
    university : Optional[str]
如何添加可选字段大学的别名名称“school”,就像id一样?
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
7
在Pydantic网站上没有记录如何使用typing Optional与Fields Default,除了允许的类型之外,其中包括提到的Optional。 Optional[x]只是Union[x, None]的简写;有关解析和验证的更多详细信息,请参阅下面的Unions,有关可以接收None值的必填字段的详细信息,请参阅Required Fields。 为此,您需要使用它们的字段自定义,就像示例中所示。
class Figure(BaseModel):
    name: str = Field(alias='Name')
    edges: str = Field(default=None, alias='Edges')
没有默认值,它会出错,因为可选项没有覆盖字段的必填性和需要一个默认值。这是我在使用Pydantic与fast API管理mongo资源时克服这个问题的解决方案。

1

请尝试以下方法:

class MedicalFolderUpdate(RWModel):
    id : str = Field(alias='_id')
    university : Optional[str] = Field(alias='school')

0
在你的情况下,你会想要使用Pydantic的Field函数来指定可选字段的信息。此外,还必须通过在model Config中设置allow_population_by_field_name来启用别名的填充字段:
from typing import Optional


class MedicalFolderUpdate(BaseModel):
    id: str = Field(alias='_id')
    university: Optional[str] = Field(alias="school")

    class Config:
        allow_population_by_field_name = True
默认情况下,university 的值将为 None。如果您希望在序列化为 JSON 或字典时排除未设置的值,可以按以下方式操作:
raw_data = {"id": "abc"}
row = MedicalFolderUpdate.parse_obj(raw_data)

# default, university is None
print(row.dict())  # {'id': 'abc', 'university': None}

# exclude from serialization
print(row.dict(exclude_unset=True))  # {'id': 'abc'}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,