I am trying to restrict one field in a class to an enum. However, when I try to get a dictionary out of class, it doesn’t get converted to string. Instead it retains the enum. I checked pydantic documentation, but couldn’t find anything relevant to my problem.
This code is representative of what I actually need.
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'}
I’m trying to get the .dict() method to return {'k': 'am', 'z': 'rrrr'}
Advertisement
Answer
You need to use use_enum_values option of model config:
use_enum_valueswhether to populate models with the
valueproperty of enums, rather than the raw enum. This may be useful if you want to serialisemodel.dict()later (default: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())
