【发布时间】:2021-04-26 10:36:46
【问题描述】:
编辑:在@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 中使用该模型时(显然)不起作用。
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 再次运行验证,这再次验证了它。
【问题讨论】:
-
顺便说一句,不要使用 map 来产生副作用......只需使用常规循环。
-
嗨@juanpa.arrivillaga!你能详细说明一下吗?
-
这不是minimal reproducible example。 请提供一个
标签: python python-3.x fastapi pydantic