Sentry Answers>FastAPI>

FastAPI Pydantic error: value is not a valid list

FastAPI Pydantic error: value is not a valid list

David Y.

The Problem

One of the routes in my FastAPI project produces the following error whenever I call it:

Click to Copy
value is not a valid list (type=type_error.list)

Here is the FastAPI route function:

Click to Copy
@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:

Click to Copy
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 Solution

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:

Click to Copy
@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:

Click to Copy
@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:

Click to Copy
class PostListResponse(Base): posts: List[schemas.PostResponse]
  • Syntax.fmListen to the Syntax Podcast (opens in a new tab)
  • Community SeriesIdentify, Trace, and Fix Endpoint Regression Issues (opens in a new tab)
  • ResourcesBackend Error Monitoring 101 (opens in a new tab)
  • Syntax.fm logo
    Listen to the Syntax Podcast (opens in a new tab)

    Tasty treats for web developers brought to you by Sentry. Get tips and tricks from Wes Bos and Scott Tolinski.

    SEE EPISODES

Considered “not bad” by 4 million developers and more than 150,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.