๐Ÿ“ Fastapi

Pydantic v2 in FastAPI

P
Author
PyLand Team
๐Ÿ“…
Published
30.06.2026
โฑ๏ธ
Reading time
1 min
๐Ÿ‘๏ธ
Views
322
๐ŸŒฟ
Level
Medium

FastAPI uses Pydantic for data validation and serialization.

Basic models

from pydantic import BaseModel, Field
from datetime import datetime

class TaskCreate(BaseModel):
    title: str = Field(min_length=1, max_length=200)
    description: str | None = None
    priority: int = Field(default=1, ge=1, le=3)
    status: str = "todo"

class TaskResponse(BaseModel):
    id: int
    title: str
    status: str
    created_at: datetime

    model_config = {"from_attributes": True}  # for ORM compatibility

Using in FastAPI

@app.post("/tasks/", response_model=TaskResponse, status_code=201)
def create_task(task: TaskCreate):
    db_task = Task(**task.model_dump())
    db.add(db_task)
    db.commit()
    return db_task

Validators

from pydantic import field_validator, model_validator

class TaskCreate(BaseModel):
    title: str
    due_date: str | None = None

    @field_validator('title')
    @classmethod
    def title_not_empty(cls, v):
        if not v.strip():
            raise ValueError('Title cannot be empty')
        return v.strip()

    @model_validator(mode='after')
    def check_dates(self):
        # model-level validation
        return self

Computed fields

from pydantic import computed_field

class TaskResponse(BaseModel):
    title: str
    status: str

    @computed_field
    @property
    def is_done(self) -> bool:
        return self.status == 'done'

model_dump and model_validate

task = TaskCreate(title='Task', priority=2)

# To dict
task.model_dump()
# {'title': 'Task', 'description': None, 'priority': 2, 'status': 'todo'}

task.model_dump(exclude_none=True)
# {'title': 'Task', 'priority': 2, 'status': 'todo'}

# From dict
data = {'title': 'Task', 'priority': 3}
TaskCreate.model_validate(data)

Schemas for different operations

class TaskBase(BaseModel):
    title: str
    priority: int = 1

class TaskCreate(TaskBase):
    pass

class TaskUpdate(BaseModel):
    title: str | None = None
    priority: int | None = None
    status: str | None = None

class TaskResponse(TaskBase):
    id: int
    created_at: datetime
    model_config = {"from_attributes": True}

Your reaction to the article

๐Ÿ’ฌ Comments (0)

๐Ÿ” Sign in to leave a comment
๐Ÿšช Login
๐Ÿ’ญ

No comments yet

Be the first to share your opinion about this article!

๐Ÿ”— Similar

Similar articles

Continue learning with these materials

๐Ÿ“

Middleware and CORS in FastAPI

Middleware processes requests and responses around FastAPI routes, while CORS controls which browser origins may...

๐Ÿ“… 30.06.2026 ๐Ÿ‘๏ธ 332
๐Ÿ“

HTTPException in FastAPI

Covered topics: Basic Usage, Status Codes, Error Details, Custom Headers.

๐Ÿ“… 30.06.2026 ๐Ÿ‘๏ธ 298
๐Ÿ“

Dependency Injection in FastAPI

Depends โ€” FastAPI's dependency injection system for reusing code across endpoints.

๐Ÿ“… 30.06.2026 ๐Ÿ‘๏ธ 306
๐ŸŽ“ Continue learning

Courses that cover this material

Visit the course to apply this material in practice.

FastAPI: From First Route to an AI-Powered Site Open course curriculum