繁体   English   中英

如何在 Pydantic (FastAPI) 中切换 boolean 值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM