程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

在 Pydantic 模型中定义可选字段是否有最佳实践?[重复]

发布于2024-11-25 16:39     阅读(95)     评论(0)     点赞(21)     收藏(2)


我正在使用 Pydantic 在 Python 项目中进行数据验证,在指定可选字段时遇到了问题BaseModel

from pydantic import BaseModel

class MyModel(BaseModel):
    author_id: int | None    # Case 1: throws error
    author_id: Optional[int] # Case 2: throws error
    author_id: int = None    # Case 3: works

现在,在请求接受上述模型作为其 JSON 主体的端点时,我没有author_id在请求中提供该字段。

当我使用 时author_id: int | None,我收到一条错误消息,提示缺少必填字段。但是,如果我将其更改为author_id: Optional[int],我会遇到相同的错误。但是当我使用author_id: int = None或 时author_id: Optional[int] = None,模型可以按预期工作而不会出现错误。(如果=存在则工作)

您对如何在 Pydantic 模型中正确定义可选字段有什么建议吗?是否有特定版本的 Pydantic(或其他库)正确支持 int | None 语法?

  • 蟒蛇==3.11
  • pydantic==2.8.1
  • fastapi==0.111.1

解决方案


出现错误的原因是没有默认值。注释本身实际上不执行任何操作。

下面的所有选项都有效,而且它们在底层基本相同。现在建议仅使用 Python 3.10+ 的项目使用第三个选项

from pydantic import BaseModel

class MyModel(BaseModel):
    author_id: Optional[int] = None # the original way
    author_id: Union[int, None] = None # another option
    author_id: int | None = None # more modern option (Python 3.10+)


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/2045888/cddd623086369f8f60d5/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

21 0
收藏该文
已收藏

评论内容:(最多支持255个字符)