数据类:要求在模型字段分组中至少设置一个值
Dataclasses: Require at least one value to be set in grouping of model fields
如何要求将数据类的一组字段中的至少一个字段设置为真值?这是否需要自定义根验证器方法,因为它需要一次查看多个字段?例如,考虑以下数据类:
@dataclass
class MyModel:
field1: Optional[str]: None
field2: Optional[str]: None
field3: Optional[str]: None
如何要求将这三个字段(field1
、field2
或 field3
)中的至少一个设置为非空字符串?是否有一些内置的方法来指定至少一个字段必须是 non-nil/empty(除了自定义根验证器)?
您可以使用根验证器或将验证器添加到 field3
并检查前面的字段(field1
和 field2
)以检查其中之一是否已设置。
与 root_validator
:
from typing import Optional
from pydantic import root_validator
from pydantic.dataclasses import dataclass
@dataclass
class MyModel:
field1: Optional[str] = None
field2: Optional[str] = None
field3: Optional[str] = None
@root_validator
def any_of(cls, v):
if not any(v.values()):
raise ValueError('one of field1, field2 or field3 must have a value')
return v
print(MyModel(field1='hello'))
print(MyModel(field2='goodbye'))
print(MyModel())
您可以定义一个 __post_init__
方法,如果所有字段都是 None
:
则引发错误
@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")
如何要求将数据类的一组字段中的至少一个字段设置为真值?这是否需要自定义根验证器方法,因为它需要一次查看多个字段?例如,考虑以下数据类:
@dataclass
class MyModel:
field1: Optional[str]: None
field2: Optional[str]: None
field3: Optional[str]: None
如何要求将这三个字段(field1
、field2
或 field3
)中的至少一个设置为非空字符串?是否有一些内置的方法来指定至少一个字段必须是 non-nil/empty(除了自定义根验证器)?
您可以使用根验证器或将验证器添加到 field3
并检查前面的字段(field1
和 field2
)以检查其中之一是否已设置。
与 root_validator
:
from typing import Optional
from pydantic import root_validator
from pydantic.dataclasses import dataclass
@dataclass
class MyModel:
field1: Optional[str] = None
field2: Optional[str] = None
field3: Optional[str] = None
@root_validator
def any_of(cls, v):
if not any(v.values()):
raise ValueError('one of field1, field2 or field3 must have a value')
return v
print(MyModel(field1='hello'))
print(MyModel(field2='goodbye'))
print(MyModel())
您可以定义一个 __post_init__
方法,如果所有字段都是 None
:
@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")