如何使用pydantic验证模型字段?
我需要验证一个“联系号码”的字段,属于ContactModel,但找不到合适的验证器。
from datetime import date
from pydantic import BaseModel, Field, EmailStr, model_validator, field_validator, 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)
@validator("contact_number")
def validate_contact_number(self, value):
"""
123-456-7890
(123) 456-7890
123 456 7890
123.456.7890
+91 (123) 456-7890
"""
if not re.match(r'^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$', value):
raise ValueError('Invalid contact number')
出现了以下错误:
raise PydanticUserError(
pydantic.errors.PydanticUserError: `@validator` cannot be applied to instance methods
而且,@validator
和@root_validator
似乎已经不再推荐使用了。
1 个回答
0
这段话的意思是,@validator
和 @root_validator
这两个东西已经不再推荐使用了,官方已经标记为过时了。
你应该使用 @field_validator
,这是最新的验证方式,可以参考这个链接了解更多:最新的验证方法
from datetime import date
from pydantic import BaseModel, Field, EmailStr, ValidationInfo, 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: str, info: ValidationInfo) -> str:
"""
123-456-7890
(123) 456-7890
123 456 7890
123.456.7890
+91 (123) 456-7890
"""
if not re.match(r'^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$', value):
raise ValueError('Invalid contact number')
return value