I’ve built a custom Pydantic schema for my FastAPI project with a couple of optional fields of custom types:
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
:
field required (type=value_error.missing)
How do I make cat
an optional field?
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.
class PetOwner: cat: Optional['Cat'] = None
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.