FastAPI-带有Pydantic List的GET请求字段

问题描述

我是FastAPI(从Flask迁移)的新手,我正在尝试为我的GET路线创建一个Pydantic模型

from fastapi import APIRouter,Depends
from pydantic import BaseModel
from typing import Optional,List

router = APIRouter()

class SortModel(BaseModel):
    field:    Optional[str]
    directions: List[str]

@router.get("/pydanticmodel")
def get_sort(criteria: SortModel = Depends(SortModel)):
    pass #my code for handling this route.....

当我运行curl -X GET http://localhost:XXXX/pydanticmodel?directions=up&directions=asc&field=id 时,我会得到422 Unprocessable Entity: {"detail":[{"loc":["body"],"msg":"field required","type":"value_error.missing"}]}

但是,如果我要更改directions:List[str]-> directions: str,则得到的200 OK方向是“ asc”。 str适用于查询参数而List[str]无效的原因是什么?我在做什么错了?

谢谢。

解决方法

我遇到了同样的问题。以下解决方案将起作用,但这并不是我真正想要的,但也许对您来说已经足够了:

from fastapi import APIRouter,Depends,Query
from pydantic import BaseModel
from typing import Optional,List

router = APIRouter()

class SortModel(BaseModel):
    field:    Optional[str]

@router.get("/pydanticmodel")
def get_sort(criteria: SortModel = Depends(SortModel),directions: List[str] = Query(...)):
    pass #my code for handling this route.....
,

这不是Pydantic或FastAPI问题。

如果要发送带有curl的数组,则应使用 -d 标志。

purrr

现在您的代码应该可以正常工作了。