如何在pydantic中进行验证



我需要检查MyDict中的键-键必须在A_list中,值是自由的。我该怎么做呢?

from pydantic import BaseModel
from typing import List, Dict, Tuple
class Model(BaseModel):
A_list: List[str]
MyDict: Dict[str, str]  # 1-str is A_list

您可以使用验证器。它们是类方法,所以values(一个字典)必须在之后提供。您的字典检索模型中已经验证的字段—在本例中为A_list

from pydantic import BaseModel, validator
from typing import List, Dict, Tuple
class Model(BaseModel):
A_list: List[str]
MyDict: Dict[str, str]  # 1-str is A_list
@validator("MyDict")
def must_be_in_list(cls, thedict, values):
for key in thedict.keys():
if key not in values["A_list"]:
raise ValueError(f"{key} not found in list!")
m1 = Model(A_list=["a"], MyDict={"a": 1})  # ok
m2 = Model(A_list=["a"], MyDict={"a": 1, "b": 2})
"""
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "pydanticmain.py", line 406, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for Model
MyDict
b not found in list! (type=value_error)
"""

最新更新