在pydantic中设置字段验证属性的方法



我有以下pydential dataclass

@dataclass
class LocationPolygon:
type: int
coordinates: list[list[list[float]]]

这是从一个json模式,其中最内部的数组有maxItems=2, minItems=2.
我找不到一种方法来设置验证在pydantic。
在字段中设置this只在列表的外层起作用。

@dataclass
class LocationPolygon:
type: int
coordinates: list[list[list[float]]] = Field(maxItems=2, minItems=2)

使用@validator并更新field属性也没有帮助,因为值已经设置并且已经进行了基本验证:

@validator('coordinates')
def coordinates_come_in_pair(cls, values, field):
field.sub_fields[0].sub_fields[0].field_info.min_items = 2
field.sub_fields[0].sub_fields[0].field_info.max_items = 2

我想用root_validatorpre=True,但那里只有原始值。

是否有办法调整字段验证属性或使用pydantic基本规则来进行验证?

您可以使用conlist函数创建嵌套约束列表:

from pydantic import conlist
from pydantic.dataclasses import dataclass

@dataclass
class LocationPolygon:
type: int
coordinates: list[list[conlist(float, min_length=2, max_length=2)]]

conlist的参数名有一个更新。现在应该可以工作了。

from pydantic import conlist
from pydantic.dataclasses import dataclass


@dataclass
class LocationPolygon:
type: int
coordinates: list[list[conlist(float, min_length=2, max_length=2)]]

最新更新