python field_validator 获取不到参数问题
先定义一个模型:
from pydantic import BaseModel,field_validatorclass UserInfo(BaseModel):"""用户信息数据模型,用于数据验证和类型提示"""id: int # 用户IDparent_id: int # 父级IDname: str # 姓名username: str # 用户名password: str # 密码(哈希后)salt: str # 密码盐值mobile: str # 手机号email: str # 邮箱avatar: str # 头像URLlevel: int # 用户等级level_expire_time: int # 等级过期时间gender: int # 性别(0-未知 1-男 2-女)bio: str # 个人简介access_token: str # 用户tokenexpires_in: int # 过期时间@field_validator("level")def compute_level(cls, v: int, values):"""自动计算 level,如果过期则返回 0"""# If level is explicitly set to None, treat it as 0if v is None:return 0level_expire_time = values.data.get("level_expire_time")if level_expire_time is None:return 0if level_expire_time < int(time.time()):return 0return v # Return the provided value if not expired
通过调试发现,只加载了level字段之前的9个字段:
从而得出结论field_validator 方法是检索到这个字段的时候触发的,所以如果想在期中获取level_expire_time 应该改变顺序
class UserInfo(BaseModel):"""用户信息数据模型,用于数据验证和类型提示"""id: int # 用户IDparent_id: int # 父级IDname: str # 姓名username: str # 用户名password: str # 密码(哈希后)salt: str # 密码盐值mobile: str # 手机号email: str # 邮箱avatar: str # 头像URLlevel_expire_time: int # 等级过期时间level: int # 用户等级gender: int # 性别(0-未知 1-男 2-女)bio: str # 个人简介access_token: str # 用户tokenexpires_in: int # 过期时间@field_validator("level")def compute_level(cls, v: int, values):"""自动计算 level,如果过期则返回 0"""# If level is explicitly set to None, treat it as 0if v is None:return 0#使用时level_expire_time字段要定义在level之前,否则获取不到level_expire_time = values.data.get("level_expire_time")if level_expire_time is None:return 0if level_expire_time < int(time.time()):return 0return v # Return the provided value if not expired
修改后成功拿到值: