Joe*_*ane 8 python python-3.7 python-dataclasses python-typing pydantic
如何要求数据类上的一组字段中的至少一个字段设置为真值?这是否需要自定义根验证器方法,因为它需要一次查看许多字段?例如,考虑以下数据类:
@dataclass
class MyModel:
field1: Optional[str]: None
field2: Optional[str]: None
field3: Optional[str]: None
Run Code Online (Sandbox Code Playgroud)
如何要求这三个字段(field1、field2或field3)中的至少一个设置为非空字符串?是否有某种内置方法可以指定至少一个字段必须为非零/空(除了自定义根验证器之外)?
SCo*_*vin 11
您可以使用根验证器,也可以添加验证器并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())
Run Code Online (Sandbox Code Playgroud)
您可以定义一个__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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4577 次 |
| 最近记录: |