python - 如何在 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 中使用模型时(显然)它不起作用。
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)]
推荐阅读
- javascript - 如何使用 set heigt 创建棋盘
- r - 根据R中的不同概率创建数字
- java - 无法访问您的文件 HTML 文件中的 Java Servlet 中的错误
- python - 在 python 中安装 PyTelegramBotAPI 时出错
- elasticsearch - Elassandra:UDT 列表匹配查询 - 无结果
- python - matplotlib.pyplot 和 seaborn 对待 numpy 数组有何不同?
- java - 将继承的类放入对象标签thymeleaf
- sql - 为什么我在 Db2 上运行 SQL 时收到错误代码
- javascript - Mapbox 方向:出现错误 {"message":"Latitude must be between -90 and 90","code":"InvalidInput"}
- search - 带有事件的 Google Analytics(分析)搜索跟踪