pydantic的validator如何验证多个字段

发布时间 2023-10-09 14:48:34作者: JentZhang

pydantic是一个数据验证和设置管理的Python库。当您需要根据多个字段的值来验证其中一个字段的值时,您可以使用@validator装饰器并设置preeach_item参数以及fields参数来指定依赖的字段。

以下是一个简单的示例,展示如何使用pydanticvalidator来验证多个字段:

from pydantic import BaseModel, validator, ValidationError

class Item(BaseModel):
    a: int
    b: int
    sum: int

    @validator('sum', pre=True, whole=True)
    def check_sum(cls, sum, values):
        a = values.get('a')
        b = values.get('b')
        if a is None or b is None:
            raise ValueError('Both "a" and "b" must be provided before "sum"')
        if sum != a + b:
            raise ValueError(f'sum should be equal to the sum of "a" and "b", got {a+b}')
        return sum

# Test
try:
    item = Item(a=1, b=1, sum=3)  # This will raise a validation error
except ValidationError as e:
    print(e)

item = Item(a=1, b=1, sum=2)  # This will be fine
print(item)

在上述示例中,我们定义了一个Item模型,其中有三个字段:absum。我们使用@validator装饰器来验证sum字段,确保它的值是ab的总和。我们通过values参数来获取其他字段的值。

这种方法允许您在验证一个字段时考虑其他字段的值。