当枚举嵌套在泛型模型中时,我很难使用Pydantic来解析它们。
class MyEnum(str, Enum):
A = 'a',
B = 'b',
C = 'c'
enumT = TypeVar('enumT',bound=MyEnum)
class EnumContainer(GenericModel,Generic[enumT]):
enum_value: enumT
containerT = TypeVar('containerT', bound=EnumContainer)
class OuterContainer(GenericModel,Generic[containerT]):
container: containerT
class testEnumparsing(BaseModel):
typer: OuterContainer[EnumContainer[MyEnum.B]]
class Config:
orm_mode = True
obj = testEnumparsing(
typer= OuterContainer(
container=EnumContainer(enum_value='a')
)
)
parsed = testEnumparsing.from_orm(obj)
print(parsed)
有了Generic模型,如何使对象仅对特定Enum值求值为testEnumparsing
?在上面的例子中,只有当传递的值是"b"时,它才应该强制。
但CCD_ 2似乎不起作用。
对EnumContainer
使用类型Literal[MyEnum.B]
class testEnumparsing(BaseModel):
typer: OuterContainer[EnumContainer[Literal[MyEnum.B]]]
class Config:
orm_mode = True
通行证:
obj = testEnumparsing(
typer=OuterContainer(
container=EnumContainer(enum_value=MyEnum.B)
)
)
失败:
obj = testEnumparsing(
typer=OuterContainer(
container=EnumContainer(enum_value=MyEnum.A)
)
)