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

Pydantic v2生成JSON Schema时如何禁止自动生成title注解?

解决Pydantic 2.x自动生成属性title的问题

问题背景

使用Pydantic 2.6.4生成JSON Schema时,未指定FieldInfo的title值的属性会被自动生成首字母大写的title,但需要移除这些自动生成的属性title,仅保留模型本身的title。

解决方案

1. 单个模型自定义处理

通过model_config中的json_schema_extra钩子,在生成Schema后自动移除所有属性的title字段:

from pydantic import BaseModel
import json

class Model(BaseModel):
    a: int
    
    model_config = {
        "json_schema_extra": lambda schema, model: [
            prop.pop("title", None) for prop in schema["properties"].values()
        ]
    }

# 验证结果
print(json.dumps(Model.model_json_schema(), indent=2))

执行后输出的JSON Schema将自动移除属性a的title字段,符合预期。

2. 全局统一处理(所有模型生效)

创建一个基类模型,将处理逻辑放入基类的model_config中,后续所有需要移除属性title的模型继承该基类即可:

from pydantic import BaseModel

class BaseNoFieldTitleModel(BaseModel):
    model_config = {
        "json_schema_extra": lambda schema, model: [
            prop.pop("title", None) for prop in schema["properties"].values()
        ]
    }

# 业务模型继承基类
class Model(BaseNoFieldTitleModel):
    a: int

3. 单个字段单独设置

如果仅需对特定字段移除自动生成的title,可以直接在Field中指定title=None:

from pydantic import BaseModel, Field

class Model(BaseModel):
    a: int = Field(title=None)

效果验证

上述方法生成的JSON Schema均会得到如下结果:

{
  "properties": {
    "a": {
      "type": "integer"
    }
  },
  "title": "Model",
  "type": "object"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:19:52