Pydantic -允许缺失字段



我有一个pydantic模型。其中一个字段必须由用户提供,但是,第二个字段可以存在,但是如果缺少则完全可以。

在缺少age的情况下,我根本不希望它出现在pydantic模型实例上。

我的模型:

from pydantic import BaseModel
class Employee(BaseModel):
name: str
age: Optional[int]

问题:

e = Employee(name="Harwey Smith")
e.age  # Has age parameter equal to None, even if not provided.

我如何设置我的雇员pydantic模型不具有age属性,如果它没有在init上提供?如果我尝试访问e.nonexistent属性,则会抛出AttributeError。这是我想发生的e.age,如果没有提供。

在我看来,你的情况是相当不寻常的,我总是喜欢有一个None值的字段。我认为它更简单,如果我们考虑到任何IDE都会为age显示的类型提示,那么接收AttributeError是出乎意料的。话虽如此,如果您使用@rootvalidator来删除age字段,您想要的是可能的:

from typing import Any, Dict, Optional
from pydantic import BaseModel, root_validator

class Employee(BaseModel):
name: str
age: Optional[int]
@root_validator(skip_on_failure=True)
def _remove_age_if_none(cls, values: Dict[str, Any]) -> Dict[str, Any]:
if "age" in values and values["age"] is None:
del values["age"]
return values

e = Employee(name="Harwey Smith")
print(e.age)

输出:

AttributeError: 'Employee' object has no attribute 'age'

这种方法是我在Pydantic文档中没有看到的,但是我看到了一些答案,表明@rootvalidator可以用来删除字段。在我看来,这种行为很奇怪,如果Pydantic在未来的版本中有所改变,我也不会感到惊讶。小心。

最新更新