Pydantic V2迁移:@field_validator()遇'unexpected keyword argument 'pre''错误
Pydantic V2 中 @field_validator 替代 @validator 时 pre 参数的解决方案
在Pydantic V2里,pre参数并没有被弃用,只是传递方式发生了变化——它不再直接作为@field_validator的关键字参数,而是通过mode参数来指定验证时机。
具体变化与写法
- Pydantic V1中用
pre=True表示在字段类型转换前执行验证 - Pydantic V2中需替换为
mode='before',该值对应原pre=True的行为
代码示例对比
Pydantic V1 写法
from pydantic import BaseModel, validator class MyModel(BaseModel): value: int @validator('value', pre=True) def convert_to_string(cls, v): return str(v) if isinstance(v, int) else v
Pydantic V2 写法
from pydantic import BaseModel, field_validator class MyModel(BaseModel): value: int @field_validator('value', mode='before') def convert_to_string(cls, v): return str(v) if isinstance(v, int) else v
补充说明
V2的mode参数还有其他可选值,对应不同验证时机:
mode='after':字段类型转换后执行验证(对应V1默认的pre=False)mode='wrap':包裹默认验证逻辑,接收原始值和验证函数两个参数,可自定义是否调用默认验证
内容的提问来源于stack exchange,提问作者Daniel Long
相关产品推荐
相关产品推荐

