Extra Models
Why Multiple Models?
Section titled “Why Multiple Models?”Different operations need different data shapes:
- Create — input model with required fields
- Read — output model with ID and timestamps
- Update — optional fields for partial updates
from pydantic import BaseModelfrom typing import Optional
class ItemBase(BaseModel): name: str description: Optional[str] = None
class ItemCreate(ItemBase): price: float
class ItemRead(ItemBase): id: int in_stock: bool
class ItemUpdate(BaseModel): name: Optional[str] = None price: Optional[float] = NoneUsing Different Models
Section titled “Using Different Models”from justapi import JustAPIApp
app = JustAPIApp()
@app.post("/items", response_model=ItemRead, status_code=201)def create_item(item: ItemCreate): # In production, save to database return {**item.model_dump(), "id": 1, "in_stock": True}
@app.get("/items/{item_id}", response_model=ItemRead)def get_item(item_id: int): return {"id": item_id, "name": "Widget", "price": 9.99, "in_stock": True}
@app.patch("/items/{item_id}", response_model=ItemRead)def update_item(item_id: int, item: ItemUpdate): return {**item.model_dump(), "id": item_id, "in_stock": True}See Also
Section titled “See Also”- Response Model — filtering output
- Body — Nested Models — nested Pydantic models
- Request Body — Pydantic model usage