Pydantic模型初始化后修改字段时能否执行验证?
Pydantic模型初始化后修改字段的验证问题
默认情况下,直接给Pydantic模型实例的字段赋值时,不会自动触发字段验证和类型转换,这就是你代码里test.test = "10"后,字段类型变成str而不是被转成int的原因。
要实现初始化后修改字段仍执行验证,分版本处理:
Pydantic V2
在模型类里通过model_config开启赋值验证:
import pydantic as pdc class Test(pdc.BaseModel): test: int | None model_config = {"validate_assignment": True} test = Test(test=None) test.test = "10" print(type(test.test)) # 输出 <class 'int'>
Pydantic V1
有几种方式可以实现验证:
方法1:开启类级别的赋值验证
给模型添加validate_assignment = True类属性,开启自动赋值验证:
from pydantic import BaseModel class Test(BaseModel): test: int | None validate_assignment = True test = Test(test=None) test.test = "10" print(type(test.test)) # 输出 <class 'int'>
方法2:使用update方法修改字段
通过update方法传入字段字典,触发验证:
from pydantic import BaseModel class Test(BaseModel): test: int | None test = Test(test=None) test.update({"test": "10"}) print(type(test.test)) # 输出 <class 'int'>
方法3:手动重新实例化触发验证
将现有实例转成字典后重新初始化模型,强制验证:
from pydantic import BaseModel class Test(BaseModel): test: int | None test = Test(test=None) test.test = "10" test = Test(**test.dict()) print(type(test.test)) # 输出 <class 'int'>
内容的提问来源于stack exchange,提问作者Jossy
相关产品推荐
相关产品推荐

