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]

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.

Share on Twitter
Bookmark this page
Ask a questionJoin the discussion

Related Answers

A better experience for your users. An easier life for your developers.

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