You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pydantic验证模型字段?联系号码验证报错及弃用问题

解决Pydantic字段验证报错及弃用问题

问题原因

  1. @validator在Pydantic v2版本中已被弃用,官方推荐使用@field_validator替代。
  2. 你编写的验证方法添加了self参数,被识别为实例方法,但Pydantic字段验证器必须是类方法(不能使用self,需用cls作为第一个参数),因此触发@validator cannot be applied to instance methods错误。

修正后的代码

from datetime import date
from pydantic import BaseModel, Field, EmailStr, field_validator
import re

class ContactModel(BaseModel):
    first_name: str = Field(max_length=15)
    last_name: str = Field(max_length=15)
    email: EmailStr
    contact_number: str
    birth_date: date
    additional_information: str = Field(max_length=250)

    @field_validator("contact_number")
    def validate_contact_number(cls, value):
        """
        支持的联系电话格式:
        123-456-7890
        (123) 456-7890
        123 456 7890
        123.456.7890
        +91 (123) 456-7890
        """
        pattern = r'^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$'
        if not re.match(pattern, value):
            raise ValueError('无效的联系电话格式')
        return value

关键修改点

  • 移除已弃用的validator导入,仅保留field_validator。
  • 将@validator("contact_number")替换为@field_validator("contact_number")。
  • 将验证方法的参数从self, value改为cls, value(cls代表当前模型类,若无需使用可省略,但规范上建议保留)。
  • 验证方法需返回处理后的字段值,若无需修改则直接返回原value。

内容的提问来源于stack exchange,提问作者Andrii Kovalchuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 16:52:21