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

如何控制Pydantic生成的字段标签(title)的生成规则?

控制Pydantic模型字段"title"属性的生成方法

1. 手动指定单个字段的Title

如果仅需修改个别字段的title,直接通过Field参数显式设置即可,该方式优先级最高,会覆盖自动生成的结果:

import pydantic
from pydantic import Field

class Creator(pydantic.BaseModel):
    firstName: str = Field(None, title="First Name")
    lastName: str = Field(None, title="Last Name")
    middle_name: str = None  # 保持自动生成的"Middle Name"

2. 自定义全局Title生成规则(推荐)

根据Pydantic版本不同,实现方式略有差异:

Pydantic v2及以上版本

利用模型配置中的title_generator参数,传入自定义函数统一处理字段名到title的转换:

import pydantic
from pydantic import BaseModel

def custom_title(field_name: str) -> str:
    # 处理驼峰命名拆分+下划线替换,转为标题大小写
    processed = []
    for idx, char in enumerate(field_name):
        if idx > 0 and char.isupper() and field_name[idx-1].islower():
            processed.append(" ")
        processed.append(char)
    return "".join(processed).title().replace("_", " ")

class Creator(BaseModel):
    firstName: str = None
    lastName: str = None
    middle_name: str = None

    model_config = {
        "title_generator": custom_title
    }

生成的Schema中,所有字段的title都会按规则生成:firstName对应"First Name",lastName对应"Last Name",middle_name对应"Middle Name"。

Pydantic v1版本

v1无内置title_generator,可通过schema_extra方法遍历修改Schema的title属性:

import pydantic

def custom_title(field_name: str) -> str:
    processed = []
    for idx, char in enumerate(field_name):
        if idx > 0 and char.isupper() and field_name[idx-1].islower():
            processed.append(" ")
        processed.append(char)
    return "".join(processed).title().replace("_", " ")

class Creator(pydantic.BaseModel):
    firstName: str = None
    lastName: str = None
    middle_name: str = None

    class Config:
        @staticmethod
        def schema_extra(schema, model):
            for field_name, field_schema in schema["properties"].items():
                field_schema["title"] = custom_title(field_name)

3. 借助第三方库简化转换逻辑

使用inflection库的titleize方法,可一键处理驼峰、下划线命名的转换:

import pydantic
from pydantic import BaseModel
import inflection

class Creator(BaseModel):
    firstName: str = None
    lastName: str = None
    middle_name: str = None

    model_config = {
        "title_generator": inflection.titleize
    }

inflection.titleize会自动将firstName转为"First Name",middle_name转为"Middle Name",无需手动编写转换逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:55:20