我使用了下面的代码:它显示了重复的验证器。为什么不能两者都用?如果不能使用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
方法名创建的验证器。您可能需要重命名方法