微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 pydantic BaseModel 的集合中检查至少一个非空内容值?

如何解决在 pydantic BaseModel 的集合中检查至少一个非空内容值?

我想验证一下,包含列表的响应在该列表的内容中至少有一个非空值。

到目前为止,我已经想到了以下带有嵌套(非集合)值的验证器,它似乎工作得很好。

然而,我通常不喜欢 Try-Catch 异常,并且想知道一种更好、更简洁的方法来做到这一点。

from pydantic import BaseModel,Field,validator
from typing import List


class Content(BaseModel):
    value: str = Field(None)


class Row(BaseModel):
    cell: Content = Field(None)


class Column(BaseModel):
    rows: List[Row] = Field(...,min_items=1)


class Response(BaseModel):
    columns: List[Column] = Field(... min_items=1)

    @validator('columns',always=True)
    def atLeastOneNonNullContentValueInTheColumList(cls,v):
        def genValues(v):
            for column in v:  # columns and rows always exist...
                for row in column.rows:
                    try:
                        yield row.content.value  # ...but Could be None either at content or value
                    except AttributeError:
                        yield None

        if not any(genValues(v)):
            raise Exception('At least one value should exist')
        return v

Pydantic 爱好者,类似情况如何处理?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。