Optional and Default Values
Not every field needs a value. Use Optional for fields that can be None, or provide default values.
from pydantic import BaseModel
from typing import Optional
class User(BaseModel):
name: str
email: Optional[str] = None
active: bool = True
Now email and active are optional:
user = User(name="Alice")
print(user.email) # None
print(user.active) # True
Fields with defaults must come after required fields - just like function arguments.
For computed defaults (like timestamps), use Field:
from pydantic import Field
from datetime import datetime
class Post(BaseModel):
title: str
created_at: datetime = Field(default_factory=datetime.now)
default_factory calls the function each time, giving you a fresh value.
I cover default patterns in my Pydantic course.