You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pydantic v2中让@property计算字段纳入Schema与序列化输出?

解决Pydantic v2计算字段在JSON Schema中缺失的问题

在Pydantic v2里,@computed_field默认不会把计算字段纳入JSON Schema,只需给装饰器加个参数配置就能解决问题,同时保留序列化输出的字段。

解决方案:显式配置@computed_field的Schema参数

你可以通过两种方式让计算字段出现在JSON Schema中:

方式1:结合Field定义Schema属性

用Field来配置计算字段的Schema元信息,清晰且能复用Pydantic的字段配置逻辑:

from pydantic import BaseModel, computed_field, Field

class User(BaseModel):
    first_name: str
    last_name: str

    @computed_field(schema=Field(title="Full Name", description="Combined first and last name"))
    @property
    def full_name(self) -> str:
        return f"{self.first_name} {self.last_name}"

方式2:指定返回类型与基础Schema

如果不需要额外描述,直接指定return_type就能让Pydantic自动生成基础Schema定义:

from pydantic import BaseModel, computed_field

class User(BaseModel):
    first_name: str
    last_name: str

    @computed_field(return_type=str, schema={"type": "string"})
    @property
    def full_name(self) -> str:
        return f"{self.first_name} {self.last_name}"

验证效果

运行以下代码测试:

user_instance = User(first_name="John", last_name="Doe")

# 生成JSON Schema,现在会包含full_name字段
json_schema = User.model_json_schema()
print(json_schema)

# 序列化输出,依然保留full_name
serialized_output = user_instance.json()
print(serialized_output)

此时model_json_schema()的输出里会包含full_name字段的Schema定义,同时json()序列化也能正常输出该字段。

原理说明

Pydantic v2设计时默认将计算字段排除在Schema之外(因为它不是输入字段),但通过@computed_field的schema参数,你可以显式告知Pydantic要把这个字段加入输出的JSON Schema,同时不影响它在序列化时的行为。

内容的提问来源于stack exchange,提问作者Aviad Rozenhek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:32:27