问题描述
我是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
现在您的代码应该可以正常工作了。