Python Pydantic-如何拥有一个;“可选”;字段,但如果存在,是否需要符合非无值?
我试图验证一个对象,该对象具有“可选”字段,即它们可能存在也可能不存在。但是当它们存在时,字段应该符合特定的类型定义(而不是无) 在下面的示例中,“大小”字段是可选的,但不允许。我希望“size”字段是可选的,但如果存在,它应该是一个floatPython Pydantic-如何拥有一个;“可选”;字段,但如果存在,是否需要符合非无值?,python,python-3.x,pydantic,Python,Python 3.x,Pydantic,我试图验证一个对象,该对象具有“可选”字段,即它们可能存在也可能不存在。但是当它们存在时,字段应该符合特定的类型定义(而不是无) 在下面的示例中,“大小”字段是可选的,但不允许。我希望“size”字段是可选的,但如果存在,它应该是一个float from pydantic import BaseModel class Foo(BaseModel): count: int size: float = None # how to make this an optional flo
from pydantic import BaseModel
class Foo(BaseModel):
count: int
size: float = None # how to make this an optional float?
>>> Foo(count=5)
Foo(count=5, size=None) # GOOD - "size" is not present, value of None is OK
>>> Foo(count=5, size=None)
Foo(count=5, size=None) # BAD - if field "size" is present, it should be a float
# BONUS
>>> Foo(count=5)
Foo(count=5) # BEST - "size" is not present, it is not required to be present, so we don't care about about validating it all. We are using Foo.json(exclude_unset=True) handles this for us which is fine.
这是可能的,做一个
来自pydantic导入BaseModel、ValidationError、validator
Foo类(基本模型):
计数:int
大小:浮动=无
@验证器('大小')
def大小是一些(cls,v):
如果v为无:
raise VALUERROR('无法将大小设置为None')
返回浮动(v)
这将按预期工作:
Foo(计数=5)
Foo(计数=5,大小=无)
>>>Foo(计数=5,大小=1.6)
Foo(计数=5,大小=1.6)
>>>Foo(计数=5,大小=无)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“[venv]/lib/python3.6/site-packages/pydantic/main.py”,第283行,在__
引发验证错误
pydantic.error\u wrappers.ValidationError:Foo的1个验证错误
大小
无法将大小设置为无(类型=值\u错误)
如果运行mypy,它会抱怨size:float=None,因为它没有定义为可选的[float]