首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用webargs根据查询参数中的值解析枚举?

如何使用webargs根据查询参数中的值解析枚举?
EN

Stack Overflow用户
提问于 2020-10-02 05:45:45
回答 1查看 511关注 0票数 0

我有下一个枚举:

代码语言:javascript
复制
class EStatus(enum.IntEnum):
    NEW = 0
    MODIFIED = 1

和模式:

代码语言:javascript
复制
ARGS = {
    'status': EnumField(EStatus, by_value=True, required=False)
}

在Flask中之后,我用webargs声明了GET-method

代码语言:javascript
复制
@use_args(ARGS, location='query')
def get(self, args: Dict[str, any]):
    return []

它会失败,并返回错误:

代码语言:javascript
复制
{'messages': {'query': {'status': ['Invalid enum value 1']}}, 'schema': <GeneratedSchema(many=False)>, 'headers': None}

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-02 13:24:43

代码语言:javascript
复制
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静态方法将字符串转换为枚举类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64163633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档