简体   繁体   中英

How to allow List as query params instead of requestbody in pydantic model for fastapi

So I have a simple fastapi model as follows:

 from typing import List
 
 from fastapi import Query, Depends, FastAPI
 from pydantic import BaseModel
 
 class QueryParams(BaseModel):
     req1: float = Query(...)
     opt1: int = Query(None)
     req_list: List[str] = Query(...)
 
 
 app = FastAPI()
 @app.post("/test", response_model=QueryParams)
 def foo(q: QueryParams = Depends()):
     return q

which works with the following command: curl -X "POST" "http://localhost:8000/test?req1=1" -d '{["foo"]}'

However: I need it to work additionally with allowing the params in the uri request as such: curl -X "POST" "http://localhost:8000/test?req1=1&req_list=foo"

I know that if I took out the req_list from the BaseModel, and shoved it in the function header as such

 from typing import List
 
 from fastapi import Query, Depends, FastAPI
 from pydantic import BaseModel
 
 class QueryParams(BaseModel):
     req1: float = Query(...)
     opt1: int = Query(None)
 
 
 app = FastAPI()
 @app.post("/test", response_model=QueryParams)
 def foo(q: QueryParams = Depends(), req_list: List[str] = Query(...)):
     return q

that it would work, but is there any way to keep it in the basemodel?

Well I figured it out:

 from typing import List
 
 from fastapi import Query, Depends, FastAPI
 from pydantic.dataclasses import dataclass
 
 @dataclass
 class QueryParams:
     req1: float = Query(...)
     opt1: int = Query(None)
     req_list: List[str] = Query(...)
 
 
 app = FastAPI()
 @app.post("/test", response_model=QueryParams)
 def foo(q: QueryParams = Depends()):
     return q

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM