当前位置: 首页 > ops >正文

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

修改后成功拿到值:

 

http://www.xdnf.cn/news/6783.html

相关文章:

  • matlab求矩阵的逆、行列式、秩、转置
  • java中的方法详解
  • QML 属性动画、行为动画与预定义动画
  • Python 中的 typing.ClassVar 详解
  • NAT转换和ICMP
  • 前k个高频元素
  • spring框架的JDBC模板技术
  • [原创](计算机数学)(The Probability Lifesaver)(P10): 生日概率问题.
  • 蓝牙A2DP协议概述
  • PSA Certified
  • Scratch游戏 | 地下城探险
  • 敏捷-第一章 引言:瀑布与敏捷
  • 第三届模式识别、机器视觉和人工智能国际会议(IEEE PRMVAI 2025)诚邀参会
  • ML307R 插到 ESP32 的 USBH_CDC 示例中
  • LocaleContextResolver实现多语言切换-笔记
  • c++ 类的语法3
  • 八股文--JUC(2)
  • 物联网技术在银行安全用电系统中的应用与实践研究
  • 【C++】15.并发支持库
  • C语言水仙花数
  • 通过python安装小智语音服务器端
  • 从实模式到保护模式
  • 基于LTE帧结构参数的F-OFDM仿真
  • 刻录光盘--和炸铁路,tarjan
  • MGX:多智能体管理开发流程
  • 动态范围调整(SEF算法实现)
  • 在多个SpringBoot程序中./相对路径下隐患、文件覆盖问题
  • CSS- 2.1 实战之图文混排、表格、表单、学校官网一级导航栏
  • 基于51单片机和8X8点阵屏、矩阵按键的记忆类小游戏
  • C语言文件操作