← Back to Tutorials

12. Pydantic Models

from pydantic import BaseModel, Field, EmailStr
from typing import Optional

class Item(BaseModel):
    name: str
    price: float = Field(..., gt=0, description="Price must be positive")
    is_offer: bool = False
    tax: Optional[float] = None

class User(BaseModel):
    username: str = Field(..., min_length=3, max_length=50)
    email: EmailStr
    full_name: Optional[str] = None

# Validator
from pydantic import validator

class Order(BaseModel):
    items: List[Item]
    discount: float = 0.0

    @validator("discount")
    def check_discount(cls, v):
        if v < 0 or v > 100:
            raise ValueError("Discount must be 0-100")
        return v
✏️ Exercise: Create a Pydantic model for a Product with name, price (>0), category, and an optional description. Add a validator for price.