如何在 Pydantic 中创建互斥字段

How to create mutually exclusive fields in Pydantic

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

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

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

我希望字段 a 和字段 b 互斥。我只想设置其中一个。有办法实现吗?

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

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