Python 数据类:要求在模型字段分组中至少设置一个值

Python 数据类:要求在模型字段分组中至少设置一个值,python,python-3.7,python-dataclasses,python-typing,pydantic,Python,Python 3.7,Python Dataclasses,Python Typing,Pydantic,如何要求数据类上的一组字段中至少有一个字段设置为真实值?这是否需要自定义根验证程序方法,因为它需要同时查看多个字段?例如,考虑下面的数据表: @dataclass class MyModel: field1: Optional[str]: None field2: Optional[str]: None field3: Optional[str]: None 如何要求将这三个字段field1、field2或field3中的至少一个设置为非空字符串?除了自定义根验证程序外

如何要求数据类上的一组字段中至少有一个字段设置为真实值?这是否需要自定义根验证程序方法,因为它需要同时查看多个字段?例如,考虑下面的数据表:

@dataclass
class MyModel:
    field1: Optional[str]: None
    field2: Optional[str]: None
    field3: Optional[str]: None

如何要求将这三个字段field1、field2或field3中的至少一个设置为非空字符串?除了自定义根验证程序外,是否有某种内置方法指定至少一个字段必须为非零/空?

您可以使用根验证程序或向字段3添加验证程序,并检查前面的字段field1和field2,以检查其中一个字段是否已设置

使用root_验证程序:

从键入导入可选 从pydantic导入根验证程序 从pydantic.dataclasses导入数据类 @数据类 类别MyModel: 字段1:可选[str]=无 字段2:可选[str]=无 字段3:可选[str]=无 @根校验器 定义任何类型的CLS,v: 如果没有任何值: raise value ERROR“字段1、字段2或字段3中的一个必须有值” 返回v printMyModelfield1='hello' printMyModelfield2='再见' printMyModel
您可以使用根验证程序或将验证程序添加到字段3,并检查前面的字段field1和field2,以检查其中一个字段是否已设置

使用root_验证程序:

从键入导入可选 从pydantic导入根验证程序 从pydantic.dataclasses导入数据类 @数据类 类别MyModel: 字段1:可选[str]=无 字段2:可选[str]=无 字段3:可选[str]=无 @根校验器 定义任何类型的CLS,v: 如果没有任何值: raise value ERROR“字段1、字段2或字段3中的一个必须有值” 返回v printMyModelfield1='hello' printMyModelfield2='再见' printMyModel 如果所有字段均为“无”,则可以定义引发错误的方法:

如果所有字段均为“无”,则可以定义引发错误的方法:

@dataclass
class MyModel:
    field1: Optional[str] = None
    field2: Optional[str] = None
    field3: Optional[str] = None

    def __post_init__(self):
        if self.field1 is None and self.field2 is None and self.field3 is None:
            raise TypeError("Value needed for at least one field")