【问题标题】:A way to set field validation attribute in pydantic一种在 pydantic 中设置字段验证属性的方法
【发布时间】:2021-10-21 02:17:39
【问题描述】:

我有以下 pydentic 数据类

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

这是从最内部数组具有maxItems=2, minItems=2 的 json 模式中获取的。
我找不到在 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 基本规则进行验证?

【问题讨论】:

    标签: python validation jsonschema python-dataclasses pydantic


    【解决方案1】:

    您可以使用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)]]
    

    【讨论】:

      猜你喜欢
      • 2020-10-24
      • 2019-05-30
      • 2022-08-16
      • 1970-01-01
      • 2023-02-15
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      相关资源
      最近更新 更多