一种在 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_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_items=2, max_items=2)]]
我有以下 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_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_items=2, max_items=2)]]