Pydantic ConfigDict(use_enum_values=True) 在提供默认值时无效。我如何提供默认值?

问题描述 投票:0回答:1

以下是一个简化的示例。

我需要在代码执行

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')
python pydantic
1个回答
0
投票

您也可以使用

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')

我希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.