如何使用 webargs 从查询参数中按值解析枚举?

How to parse enums by value from query parameters using webargs?

我有下一个枚举:

class EStatus(enum.IntEnum):
    NEW = 0
    MODIFIED = 1

和模式:

ARGS = {
    'status': EnumField(EStatus, by_value=True, required=False)
}

在 Flask 中,我用 webargs:

声明了 GET 方法
@use_args(ARGS, location='query')
def get(self, args: Dict[str, any]):
    return []

它失败并出现错误:

{'messages': {'query': {'status': ['Invalid enum value 1']}}, 'schema': <GeneratedSchema(many=False)>, 'headers': None}

我在调试器中检查过,发现 EnumField 调用了 EStatus(value)。问题是我的值是 str 类型,因为它来自查询参数。

如何在调用 EStatus(value) 之前将其 EnumField 转换为 int

class EStatus(enum.IntEnum):
    NEW = 0
    MODIFIED = 1

  @staticmethod
    def from_str(e_status: str):
        e_status = e_status.upper()
        if e_status in EStatus.__members__:
            return EStatus[e_status]
        else:
            raise ValueError(f'{e_status} is not a valid EStatus.')

#You can use above from_str like below,
EStatus e_status = EStatus.from_str('NEW')
print(e_status.name)
print(e_status.value)

希望对于您的问题,您应该能够使用 from_str staticmethod 将 str 转换为 Enum 类型。