← Back to Tutorials

21. Response Model

from fastapi import FastAPI
from pydantic import BaseModel
from typing import Optional

app = FastAPI()

class ItemIn(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
    internal_code: str  # hidden from response

class ItemOut(BaseModel):
    name: str
    price: float
    tax: float = None

@app.post("/items/", response_model=ItemOut)
def create_item(item: ItemIn):
    return item  # internal_code is filtered out

# response_model_exclude_unset
@app.get("/items/{id}", response_model=ItemOut, response_model_exclude_unset=True)
def get_item(id: int):
    return {"name": "Item", "price": 10.0}

# response_model_include / exclude
@app.get("/items/", response_model=list[ItemOut])
def list_items():
    return [{"name": "A", "price": 1.0}]
✏️ Exercise: Create In/Out models for a User. Input has password, output excludes password. Create a POST endpoint that returns only the safe fields.