logo

Nested Models

Real data has structure. An order contains items. A user has an address. Pydantic handles this by nesting models.

from pydantic import BaseModel

class Address(BaseModel):
    street: str
    city: str
    country: str

class User(BaseModel):
    name: str
    address: Address

Pass nested data as dictionaries - Pydantic validates all levels:

user = User(
    name="Alice",
    address={"street": "123 Main St", "city": "NYC", "country": "USA"}
)

print(user.address.city)  # NYC

If any nested field is invalid, you get an error pointing to the exact location.

You can nest as deep as needed:

class Company(BaseModel):
    name: str
    ceo: User  # User has Address inside it

Pydantic validates the entire tree.

I explain nested model patterns in my Pydantic course.