如何自动识别Pydantic对象的必填属性?
如何自动识别Pydantic对象中的必填属性?
你可以利用Pydantic内置的字段元数据自动识别必填属性,无需手动维护固定列表。以下是针对不同Pydantic版本的实现方案:
Pydantic v2 实现
在Pydantic v2中,模型的model_fields属性包含所有字段的元数据,通过判断字段是否未设置默认值(即default为PydanticUndefined),就能筛选出必填属性:
from pydantic import BaseModel, Field, PydanticUndefined class MyClass(BaseModel): mandatory1: str = Field(description="mandatory") mandatory2: str = Field(description="mandatory") optional: str = Field(default="", description="optional") def mandatory_attributes(self): """自动识别所有必填属性""" return [ field_name for field_name, field in self.model_fields.items() if field.default is PydanticUndefined ] obj = MyClass(mandatory1="a", mandatory2="b", optional="c") result = obj.mandatory_attributes() assert result == ["mandatory1", "mandatory2"]
Pydantic v1 实现
如果你使用的是Pydantic v1版本,可通过__fields__属性访问字段元数据,直接利用字段的required属性判断:
from pydantic import BaseModel, Field class MyClass(BaseModel): mandatory1: str = Field(description="mandatory") mandatory2: str = Field(description="mandatory") optional: str = Field(default="", description="optional") def mandatory_attributes(self): """自动识别所有必填属性""" return [ field_name for field_name, field in self.__fields__.items() if field.required ] obj = MyClass(mandatory1="a", mandatory2="b", optional="c") result = obj.mandatory_attributes() assert result == ["mandatory1", "mandatory2"]
核心逻辑说明
- 必填属性的本质是创建模型实例时必须传入的字段,也就是未设置默认值的字段
- Pydantic会自动跟踪字段的必填状态,我们只需读取对应元数据即可完成自动识别
内容的提问来源于stack exchange,提问作者pyjedy
相关产品推荐
相关产品推荐

