以下是一个简化的示例。
我需要在代码执行
ConfigDict(use_enum_values=True)
时配置 model_dump()
,并且我想摆脱原始枚举值以便以后序列化。
A
如何为A.x
提供默认值,以便model_dump()
输出枚举值而不是枚举本身?
Bonus:A有什么办法可以初始化
A.x
本身并让用户无法设置它吗?毕竟,默认值是可以被覆盖的
from enum import Enum
from pydantic import BaseModel, ConfigDict
class X(Enum):
x = "X"
y = "Y"
z = "Z"
class A(BaseModel):
model_config = ConfigDict(use_enum_values=True, frozen=True)
x: X = X.x
>>> A()
A(x=<X.x: 'X'>)
>>> A(x=X.x)
A(x='X')
您也可以使用
validate_default
配置选项来验证默认值。参见:
from enum import Enum
from pydantic import BaseModel, ConfigDict
class X(Enum):
x = "X"
y = "Y"
z = "Z"
class A(BaseModel):
model_config = ConfigDict(
use_enum_values=True,
frozen=True,
validate_default=True,
)
x: X = X.x
现在输出:
>>> A()
A(x='X')
我希望这有帮助!