Pydantic 为一个字段定义多个变量

Pydantic defining multiple variables to one field

如何写我的 Request class 来表示负载可以是 Union[EcrPayload]Union[S3Payload]

class EcrPayload(CamelModel):
    repository_name: str
    version: str

class S3Payload(CamelModel):
    bucket_name: str
    object_key_name: str

class Request(CamelModel):
    payload: Union[EcrPayload]

您可以使用相同的 CamelModel。

class Request(CamelModel):
    payload: Union[CamelModel]

只需将 Union 与您希望包含的 类 一起使用:

class Request(CamelModel):
    payload: Union[EcrPayload, S3Payload] # accepts ECR and S3 payloads, but nothing else

请注意,这意味着成员变量 payload 必须是 EcrPayloadS3Payload 的实例, 但不能是其他 .

如果您希望包含任何类型的 CamelModel(可能包括新模型 EcsPayloadLambdaPayload 或您将来可能定义的其他模型),您可以这样写:

class Request(CamelModel):
    payload: CamelModel # any CamelModel is accepted, including ECR and S3