如何用Pydantic验证模型字段?联系号码验证报错及弃用问题
解决Pydantic字段验证报错及弃用问题
问题原因
@validator在Pydantic v2版本中已被弃用,官方推荐使用@field_validator替代。- 你编写的验证方法添加了
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
相关产品推荐
相关产品推荐

