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

A way to set field validation attribute in pydantic

我有以下 pydentic 数据类

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

这取自 json 架构,其中最内部数组具有 maxItems=2, minItems=2
我在 pydantic 中找不到为此设置验证的方法。
在现场设置此项仅适用于列表的外层。

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

使用 @validator 并更新字段属性也无济于事,因为该值已经设置并且已经进行了基本验证:

@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_items=2, max_items=2)]]