【问题标题】:Pydantic enum field does not get converted to stringPydantic 枚举字段未转换为字符串
【发布时间】:2023-04-04 01:23:01
【问题描述】:

我试图将一个类中的一个字段限制为一个枚举。但是,当我尝试从课堂中取出字典时,它不会转换为字符串。相反,它保留了枚举。我检查了pydantic documentation,但找不到与我的问题相关的任何内容。

这段代码代表了我实际需要的内容。

from enum import Enum
from pydantic import BaseModel

class S(str, Enum):
    am='am'
    pm='pm'

class K(BaseModel):
    k:S
    z:str

a = K(k='am', z='rrrr')
print(a.dict()) # {'k': <S.am: 'am'>, 'z': 'rrrr'}

我正在尝试让 .dict() 方法返回 {'k': 'am', 'z': 'rrrr'}

【问题讨论】:

    标签: python fastapi pydantic


    【解决方案1】:

    你需要使用model configuse_enum_values选项:

    use_enum_values

    是否使用枚举的value 属性填充模型,而不是原始枚举。如果您想稍后序列化model.dict(),这可能很有用(默认:False

    from enum import Enum
    from pydantic import BaseModel
    
    class S(str, Enum):
        am='am'
        pm='pm'
    
    class K(BaseModel):
        k:S
        z:str
    
        class Config:  
            use_enum_values = True  # <--
    
    a = K(k='am', z='rrrr')
    print(a.dict())
    

    【讨论】:

    • 此选项默认为 False 是否有原因?我觉得在大多数情况下,我们都要求这是真的。
    • @Krishna 有人可能会争论为什么不将日期保留为 ISO8601 字符串?最不意外的原则是你得到了你所要求的,你要求的是一个枚举
    • 有没有办法在使用 .dict() 进行序列化时使用枚举值,但在反序列化和构造 pydantic 对象时保留完整的枚举?
    猜你喜欢
    • 2012-08-25
    • 2010-10-03
    • 1970-01-01
    • 2014-03-18
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多