pydantic:重复验证函数



我使用了下面的代码:它显示了重复的验证器。为什么不能两者都用?如果不能使用Field,如何在@validator中创建别名?

from pydantic import BaseModel, validator, Field
import datetime
class MultiSourceInput(BaseModel):
abc :   str = Field(..., alias= 'abc_1',description= "xxxxxxxxxxxx.")
xyz :   int= Field(..., description= "xxxxxxxx ",ge=0, le=150)
@validator("abc")
def abc(value): 
values = float(value) 
if value <=141 and value>=0: 
return value
else:
0

这是回溯:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 37, in MultiSourceInput
File "pydantic/class_validators.py", line 85, in pydantic.class_validators.validator.dec
File "pydantic/class_validators.py", line 144, in pydantic.class_validators._prepare_validator
pydantic.errors.ConfigError: duplicate validator function "__main__.MultiSourceInput.abc"; if this is intended, set `allow_reuse=True`

在我的例子中,发生这种情况是因为验证方法接收的是self而不是cls,这意味着:

@validator("my_field")
def parse_my_field(self, v):
...

代替:

@validator("my_field")
def parse_my_field(cls, v):
...

我的问题是由代码前面的错误(看起来不相关)引起的。一些连锁效应导致duplicate validator function错误。当我修复了前面的错误后,这个就消失了

检查是否有使用abc方法名创建的验证器。您可能需要重命名方法

最新更新