One of the routes in my FastAPI project produces the following error whenever I call it:
value is not a valid list (type=type_error.list)
Here is the FastAPI route function:
@router.get('', response_model = List[schemas.PostResponse]) def get_posts(db : Session = Depends(get_db)): posts = db.query(models.Post).all() return {"posts" : posts}
Here is the definition of the PostResponse
Pydantic model:
from pydantic import BaseModel from datetime import datetime class PostResponse(BaseModel): user_id: int post_id: str created_at : datetime user : UserResponse class Config: orm_mode = True
What is causing the error and how can I fix it?
The response_model
keyword argument in @router.get
indicates that the route function should return a value of type List[schemas.PostResponse]
. However, the function’s return
statement returns a dictionary instead ({"posts": posts}
). To fix this error, we must either change the function to return the expected type or change the response_model
argument to reflect the function’s return value.
Changing the return type:
@router.get('', response_model = List[schemas.PostResponse]) def get_posts(db : Session = Depends(get_db)): posts = db.query(models.Post).all() return posts # <-- changed return value
Changing response_model
:
@router.get('', response_model = List[schemas.PostListResponse]) # <-- changed return type def get_posts(db : Session = Depends(get_db)): posts = db.query(models.Post).all() return {"posts" : posts}
We must also create a PostListResponse
Pydantic model to match our return value:
class PostListResponse(Base): posts: List[schemas.PostResponse]
Loved by over 4 million developers and more than 90,000 organizations worldwide, Sentry provides code-level observability to many of the world’s best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.