Pydantic 别名技巧:将现有字段别名指向嵌套键值

霞舞

霞舞

2025-10-10

763人浏览

原创

pydantic 别名技巧:将现有字段别名指向嵌套键值

本文旨在解决在使用 Pydantic 处理遗留 API 数据时,如何将响应中的嵌套字段值映射到现有字段的问题。通过 computed_field 和 Field(exclude=True) 的组合,以及 serialization_alias 和 validation_alias 属性与 AliasPath 的结合使用,可以优雅地实现字段别名,避免手动删除原始字段,并保持数据模型的清晰和简洁。

在使用 Pydantic 处理来自遗留 API 的数据时,经常会遇到响应字段结构不符合预期的情况。一个常见的场景是,需要将响应中的嵌套字段的值映射到模型中已存在的字段上,而不是保留原始的嵌套结构。本文将介绍两种使用 Pydantic 实现这种字段别名的方法,并提供示例代码。

方法一:使用 computed_field 和 Field(exclude=True)

这种方法适用于 Pydantic v1.0 及以上版本。其核心思想是,首先将原始嵌套字段定义为一个 Pydantic 模型,然后使用 computed_field 创建一个计算字段,该字段从嵌套模型中提取所需的值。同时,使用 Field(exclude=True) 将原始嵌套字段排除在序列化结果之外。

以下是一个示例:

from pydantic import BaseModel, Field, computed_field

class Logo(BaseModel):
    url: str = ''


class Survey(BaseModel):
    logo: Logo = Field(exclude=True)

    @computed_field
    @property
    def logo_url(self) -> str:
        return self.logo.url

a = Survey(logo={'url': 'foo'})
print(a.model_dump())
#{'logo_url': 'foo'}

在这个例子中,Logo 模型表示 API 响应中的 logo 字段,它包含一个 url 属性。Survey 模型包含一个 logo 字段,类型为 Logo,并且使用 exclude=True 排除在序列化结果之外。logo_url 是一个计算字段,它使用 @computed_field 装饰器标记,并使用 @property 定义为属性。logo_url 属性从 logo 字段的 url 属性中提取值。

优点:

  • 实现简单,易于理解。
  • 不需要修改原始 API 响应数据。

缺点:

Go语言(Golang)1.26.0
Go语言(Golang)1.26.0

Go语言(Golang)1.26.0版本提供 Go 官方 Windows amd64 MSI 安装包下载入口,版本号 1.26.0,可用于旧项目维护、兼容性测试和指定版本开发环境配置。

下载
  • 需要定义额外的 Logo 模型。
  • logo 字段仍然存在于模型实例中,只是在序列化时被排除。

方法二:使用 serialization_alias 和 validation_alias 以及 AliasPath

这种方法适用于 Pydantic v2.0 及以上版本,使用了 serialization_alias 和 validation_alias 属性,以及 AliasPath。serialization_alias 用于指定序列化时使用的字段名,validation_alias 用于指定验证时使用的字段名。AliasPath 用于指定嵌套字段的路径。

以下是一个示例:

from pydantic import BaseModel, Field, AliasPath

class Survey(BaseModel):
    logo_url: str = Field(
        ...,
        serialization_alias="logo",
        validation_alias=AliasPath('logo', 'url')
    )

a = Survey.model_validate({'logo': {'url': 'foo'}})
print(a.model_dump(by_alias=True))
# {'logo': 'foo'}

在这个例子中,logo_url 字段使用了 serialization_alias="logo",这意味着在序列化时,该字段将被命名为 logo。validation_alias=AliasPath('logo', 'url') 指定了验证时,logo_url 字段的值应该从 logo 字典的 url 键中获取。

优点:

  • 代码更加简洁。
  • 不需要定义额外的模型。
  • 可以直接将嵌套字段的值映射到目标字段。

缺点:

  • 需要理解 serialization_alias 和 validation_alias 的含义。
  • 只适用于 Pydantic v2.0 及以上版本。

总结

本文介绍了两种使用 Pydantic 将现有字段别名指向嵌套键值的方法。第一种方法使用 computed_field 和 Field(exclude=True),适用于 Pydantic v1.0 及以上版本。第二种方法使用 serialization_alias 和 validation_alias 以及 AliasPath,适用于 Pydantic v2.0 及以上版本。选择哪种方法取决于您的具体需求和 Pydantic 版本。在实际应用中,建议根据 API 响应的结构和复杂度,选择最合适的方法来实现字段别名。

注意事项:

  • 在使用 serialization_alias 时,需要确保在调用 model_dump() 方法时,设置 by_alias=True,才能使别名生效。
  • 在使用 validation_alias 时,需要确保使用 model_validate() 方法来验证数据,才能使别名生效。
  • 在处理复杂的嵌套结构时,可以组合使用 AliasPath 和其他 Pydantic 功能,例如 validator,来实现更灵活的字段别名。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
墨刀AI提示词教学
墨刀AI提示词教学

本合集由PHP中文网精心整理,为您提供全面的墨刀AI提示词教学。内容涵盖高质量原型撰写公式与实操窍门,助您轻松掌握AI设计工具。无论是零基础入门还是进阶技巧,都能让您快速上手,大幅提升产品设计与协作效率。

2026.08.04

10

21

墨刀AI完整入门
墨刀AI完整入门

PHP中文网为您倾力打造墨刀AI保姆级入门指南完整版!本合集从零基础讲起,涵盖AI生成原型、提示词优化、图片转原型及多轮对话等核心功能。无论您是新手还是进阶用户,都能轻松掌握产品设计全流程。快来PHP中文网,一键解锁高效设计技巧,让想法即刻成型!

2026.08.04

8

20

墨刀AI进阶技巧
墨刀AI进阶技巧

本合集由PHP中文网精心整理,为您提供墨刀AI核心进阶策略指南。内容涵盖高效提示词写作、原型智能生成与微调、结构化导图制作及行业分析报告输出等实战技巧。助您轻松掌握AI设计工具,大幅提升产品设计与团队协作效率。

2026.08.04

10

14

火山引擎实名认证失败怎么办
火山引擎实名认证失败怎么办

火山引擎实名认证失败可能与证件信息填写错误、姓名或企业信息不一致、证件照片不清晰、营业执照状态异常、手机号验证失败或审核资料不完整有关。本专题整理个人认证、企业认证、资料上传、审核退回、重新提交和认证不通过的常见处理方法。

2026.08.04

5

10

火山引擎域名备案流程详解
火山引擎域名备案流程详解

火山引擎域名备案适合需要在火山引擎云服务器、对象存储、CDN或网站服务上绑定域名的用户参考。本专题整理备案入口、账号实名认证、备案类型选择、主体信息填写、网站信息提交、资料上传、初审核验、管局审核和备案失败排查,帮助用户完成网站上线前的备案流程。

2026.08.04

1

10

火山引擎DNS解析配置步骤
火山引擎DNS解析配置步骤

使用火山引擎DNS解析网站域名时,需要确认域名已完成管理接入,并正确配置服务器IP、CNAME地址或验证记录。本专题整理域名添加、记录类型选择、TTL设置、解析状态检查、备案和访问测试等流程,适合新手搭建网站时参考。

2026.08.04

3

10

火山引擎对象存储使用教程
火山引擎对象存储使用教程

火山引擎对象存储适合用于网站图片、视频文件、备份数据、静态资源和应用附件管理。本专题整理TOS控制台入口、存储桶创建、地域选择、权限设置、文件上传、访问链接生成、CDN加速、费用查看和常见上传或访问失败问题,帮助用户快速掌握对象存储基础操作。

2026.08.04

1

10

火山引擎云服务器使用教程
火山引擎云服务器使用教程

火山引擎云服务器使用教程适合第一次购买、部署和管理云服务器的用户参考。本专题整理控制台入口、实例创建、地域和配置选择、系统镜像设置、安全组放行、远程连接、网站部署、续费计费和常见连接失败问题,帮助用户快速完成云服务器基础使用流程。

2026.08.04

5

10

火山引擎API Key绑定大模型教程
火山引擎API Key绑定大模型教程

火山引擎API Key怎么绑定大模型适合需要在火山方舟、应用后台、脚本工具或AI编程软件中调用模型的开发者参考。本专题整理控制台服务开通、API Key创建、模型权限检查、模型ID选择、Base URL填写、调用测试和鉴权失败排查,帮助用户完成从密钥到模型调用的配置流程。

2026.08.04

2

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 官方文档
Go 官方文档

共0课时 | 0人学习

golang入门到项目实战教程
golang入门到项目实战教程

共0课时 | 0人学习

A Tour of Go
A Tour of Go

共0课时 | 0人学习