Sentry Answers>FastAPI>

Optional field missing value error in custom Pydantic model

Optional field missing value error in custom Pydantic model

David Y.

The Problem

I’ve built a custom Pydantic schema for my FastAPI project with a couple of optional fields of custom types:

Click to Copy
class PetOwner: cat: Optional['Cat']

However, when Pydantic validates instances of this class that do not have a cat specified, it returns the following error message for every field in Cat:

Click to Copy
field required (type=value_error.missing)

How do I make cat an optional field?

The Solution

The line cat: Optional['Cat'] declares a class attribute named cat with the type hint Optional['Cat']. Optional is a class from the Python typing module, used to indicate that a value can be of the specified type or it can be None. It can also be written as Cat | None.

While we’ve assigned a type hint to cat, we have not assigned it a default value. In older versions of Pydantic, attributes with a type hint including None were implicitly assigned a default value of None, but this was changed for version 2. Therefore, it is necessary to assign cat a default value of None to produce the expected behavior.

Click to Copy
class PetOwner: cat: Optional['Cat'] = None
  • 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.