相关疑难解决方法(0)

如何使用 FastAPI 从 Pydantic 模型中排除可选未设置值?

我有这个模型:

class Text(BaseModel):
    id: str
    text: str = None


class TextsRequest(BaseModel):
    data: list[Text]
    n_processes: Union[int, None]
Run Code Online (Sandbox Code Playgroud)

所以我希望能够接受如下请求:

{"data": ["id": "1", "text": "The text 1"], "n_processes": 8} 
Run Code Online (Sandbox Code Playgroud)

{"data": ["id": "1", "text": "The text 1"]}.
Run Code Online (Sandbox Code Playgroud)

现在在第二种情况下我得到

{'data': [{'id': '1', 'text': 'The text 1'}], 'n_processes': None}
Run Code Online (Sandbox Code Playgroud)

使用此代码:

app = FastAPI()

@app.post("/make_post/", response_model_exclude_none=True)
async def create_graph(request: TextsRequest):
    input_data = jsonable_encoder(request)
Run Code Online (Sandbox Code Playgroud)

n_processes那么这里我该如何排除呢?

python optional-parameters pydantic fastapi

10
推荐指数
2
解决办法
2万
查看次数

Pydantic 模型字段与 Typing.Optional[] 与 Typing.Optional[] = None

创建Pydantictyping.Optional[]模型时隐式将可选属性设置为 None与显式分配之间有什么区别?在这两种情况下,属性最终都会在类对象实例化时具有一个值。typing.Optional[] = NoneNone

import typing
import pydantic


class Bar(pydantic.BaseModel):
    a: typing.Optional[int]

    @pydantic.validator('a', always=True, pre=True)
    def check_a(cls, v, values, field):
        print("WITHOUT NONE")
        print(values)
        print(field)
        return v


class Baz(pydantic.BaseModel):
    a: typing.Optional[int] = None

    @pydantic.validator('a', always=True, pre=True)
    def check_a(cls, v, values, field):
        print("WITH NONE")
        print(values)
        print(field)
        return v


print(Bar())
print(Baz())
Run Code Online (Sandbox Code Playgroud)

输出:

WITHOUT NONE
{}
name='a' type=Optional[int] required=False default=None
a=None
WITH NONE
{}
name='a' type=Optional[int] required=False default=None
a=None
Run Code Online (Sandbox Code Playgroud)

python annotations python-typing pydantic

10
推荐指数
2
解决办法
9188
查看次数

如何使用 FastAPI 在 OpenAPI/Swagger 中记录默认 None/null?

使用 ORM,我想要执行一个 POST 请求,让某些字段具有null值,该值将在数据库中转换为那里指定的默认值。

问题是 OpenAPI (Swagger) docs忽略了默认值None,并且默认情况下仍然提示 a UUID

from fastapi import FastAPI
from pydantic import BaseModel
from typing import Optional
from uuid import UUID
import uvicorn


class Table(BaseModel):
    # ID: Optional[UUID]      # the docs show a example UUID, ok
    ID: Optional[UUID] = None # the docs still shows a uuid, when it should show a null or valid None value.

app = FastAPI()  
    
@app.post("/table/", response_model=Table)
def create_table(table: Table):
    # here we call …
Run Code Online (Sandbox Code Playgroud)

python database swagger openapi fastapi

5
推荐指数
1
解决办法
9647
查看次数