如何访问Pydantic BaseModel中Field的自定义关键字参数my_key?
访问Pydantic Field中的自定义关键字参数my_key
自定义关键字参数(比如my_key)不会出现在模型实例的__dict__里,因为它属于字段的元数据,存储在模型的字段定义中,而非实例的属性值里。你可以通过以下方式访问:
Pydantic v2 版本
使用模型的model_fields属性获取所有字段定义,再从字段的field_info.extra字典中提取自定义参数:
from pydantic import BaseModel, Field class MyModel(BaseModel): x: str = Field(default=None, my_key=7) def print_field_objects(self): # 遍历所有字段 for field_name, field in self.model_fields.items(): # 从extra中获取自定义参数 my_key_val = field.field_info.extra.get("my_key") if my_key_val is not None: print(f"字段 {field_name} 的my_key值: {my_key_val}") # 测试调用 model = MyModel(x="hello") model.print_field_objects() # 输出:字段 x 的my_key值: 7
Pydantic v1 版本
如果使用旧版Pydantic,替换为__fields__属性访问字段定义:
from pydantic import BaseModel, Field class MyModel(BaseModel): x: str = Field(default=None, my_key=7) def print_field_objects(self): for field_name, field in self.__fields__.items(): my_key_val = field.field_info.extra.get("my_key") if my_key_val is not None: print(f"字段 {field_name} 的my_key值: {my_key_val}")
FastAPI 中使用示例
在FastAPI端点中,你可以直接访问模型的字段元数据,无需实例化也能获取:
from fastapi import FastAPI from pydantic import BaseModel, Field app = FastAPI() class MyModel(BaseModel): x: str = Field(default=None, my_key=7) @app.get("/get-my-key") def get_my_key(): # 获取单个字段的my_key值 x_my_key = MyModel.model_fields["x"].field_info.extra.get("my_key") return {"field_x_my_key": x_my_key} # 访问 /get-my-key 会返回 {"field_x_my_key":7}
内容的提问来源于stack exchange,提问作者PythonForEver
相关产品推荐
相关产品推荐

