Sentry Answers>FastAPI>

FastAPI Pydantic error: value is not a valid list

FastAPI Pydantic error: value is not a valid list

David Y.

The ProblemJump To Solution

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]
  • Community SeriesIdentify, Trace, and Fix Endpoint Regression Issues
  • ResourcesBackend Error Monitoring 101
  • Syntax.fm logo
    Listen to the Syntax Podcast

    Tasty Treats for Web Developers brought to you by Sentry. Web development tips and tricks hosted by Wes Bos and Scott Tolinski

    Listen to Syntax

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.

© 2024 • Sentry is a registered Trademark
of Functional Software, Inc.