如何在 Pydantic 中创建互斥字段

Epi*_*pic 4 pydantic

我正在使用 Pydantic 来建模对象。如何使两个字段互斥?

例如,如果我有以下模型:

class MyModel(pydantic.BaseModel):
    a: typing.Optional[str]
    b: typing.Optional[str]
Run Code Online (Sandbox Code Playgroud)

我希望场a与场b是互斥的。我只想设置其中之一。有办法实现吗?

MoS*_*oSt 8

您可以使用 pydantic.validator 装饰器来添加自定义验证。

from typing import Optional
from pydantic import BaseModel, validator

class MyModel(BaseModel):
    a: Optional[str]
    b: Optional[str]

    @validator("b", always=True)
    def mutually_exclusive(cls, v, values):
        if values["a"] is not None and v:
            raise ValueError("'a' and 'b' are mutually exclusive.")

        return v
Run Code Online (Sandbox Code Playgroud)