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
相关产品推荐
相关产品推荐

