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.