如何修改Pydantic模型字段描述?调用model_json_schema未生效
解决Pydantic模型字段描述更新后JSON Schema不生效的问题
直接修改model_fields中字段的description后,调用model_json_schema()返回的还是原始描述,这是因为Pydantic会缓存模型的JSON Schema,修改字段属性不会自动更新这个缓存。
解决步骤
在更新字段描述后,清除模型的schema缓存,让model_json_schema()重新生成schema时读取最新的字段属性:
修改后的代码
from pydantic import BaseModel, Field class A(BaseModel): @classmethod def update_description(cls, field_name: str, new_description: str): if field_name in cls.model_fields: cls.model_fields[field_name].description = new_description # 清除schema缓存,触发重新生成 if hasattr(cls, '__pydantic_schema_cache__'): cls.__pydantic_schema_cache__.clear() else: raise ValueError(f"Field '{field_name}' does not exist in {cls.__name__}") class B(A): J: str = Field(description="MEATBALL") B.update_description('J', 'Updated') b_instance = B(J="A") print(b_instance.model_json_schema())
原理说明
Pydantic在首次调用model_json_schema()时,会将生成的Schema结果缓存到模型类的__pydantic_schema_cache__属性中。后续调用该方法时,直接返回缓存值,不会重新读取字段的最新属性。清除缓存后,再次调用model_json_schema()会重新遍历字段属性生成Schema,此时就能拿到更新后的描述。
内容的提问来源于stack exchange,提问作者Zachary Fontaine
相关产品推荐
相关产品推荐

