我有以下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_validator
和pre=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)]]