[英]How to toggle boolean value in Pydantic (FastAPI)
编辑:在@juanpa.arrivillaga 正确辩称最初的问题没有提供最小的可复制示例之后,我决定重写它添加更多上下文:我正在使用FastAPI。
我试图通过定义一个验证器来对项目值进行转换,该验证器将返回项目值的not
:
from pydantic import BaseModel, Field, validator
class Foo(BaseModel):
key: str = Field(...)
condition: bool = Field(...)
@validator('condition')
def toogleCondition(cls, v):
return not v
这个工具有效。
但是,当在 FastAPI 中使用 model 时,它(显然)不起作用。
from fastapi import FastAPI
from pydantic import BaseModel, Field, validator
# insert Foo definition here
app = FastAPI()
@app.get("/fail", response_model=Foo)
def fail():
return Foo(key='hola', condition=True)
@app.get("/success")
def success():
return Foo(key='hola', condition=True).dict()
如果您运行该代码,您将得到/fail
两次转换值,而/success
只转换一次。
这是因为response_model
再次运行验证,这再次对其进行了调整。
这通常有效:
>>> import pydantic, typing
>>> data = [{'key': 'foo', 'condition': False}, {'key': 'bar', 'condition': True}]
>>> class Foo(pydantic.BaseModel):
... key: str
... condition: bool
... @pydantic.validator("condition")
... def toggle_condition(cls, v):
... return not v
...
>>> class Bar(pydantic.BaseModel):
... foo_list: typing.List[Foo]
...
>>> Bar(foo_list=data)
Bar(foo_list=[Foo(key='foo', condition=True), Foo(key='bar', condition=False)])
>>> data
[{'key': 'foo', 'condition': False}, {'key': 'bar', 'condition': True}]
这是我正在使用的:
>>> pydantic.version.VERSION
'1.7.3'
>>> import sys
>>> print(sys.version)
3.7.7 (default, May 6 2020, 04:59:01)
[Clang 4.0.1 (tags/RELEASE_401/final)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.