Pydantic 模型:添加不区分大小写的字段

问题描述 投票:0回答:1

我有一个确认字段,接受用户的“是”(不区分大小写)输入。这就是我的实现方式:

class ConfirmEnum(str, Enum):
    yes = "yes"
    Yes = "Yes"
    YES = "YES"
class OtherFields(CamelModel):
    data: int
    confirm: Optional[ConfirmEnum]
    ...other fileds added here
async def pet_classes(
    pet_service: PetService = Depends(
        PetService
    ),
    confirm: ConfirmEnum = Query(None, alias="confirm"),
    response: Response = status.HTTP_200_OK,
):

我认为这不是正确的方法,或者一定有比仅使用枚举更好的方法。

python enums model fastapi pydantic
1个回答
0
投票

我无法评论 Pydantic,但你的枚举应该是:

class ConfirmEnum(str, Enum):
    YES = "YES"
    #
    @classmethod
    def _missing_(cls, value):
        try:
            return cls[value.upper()]
        except KeyError:
            pass

使用

try/except
是为了在使用无效密钥时不会出现双堆栈跟踪。

© www.soinside.com 2019 - 2024. All rights reserved.