py-pydantic-patternslisted
Install: claude install-skill aiskillstore/marketplace
# Pydantic v2 Patterns
## Problem Statement
Pydantic v2 has significant API changes from v1. This codebase uses v2. Wrong patterns cause validation failures, serialization bugs, and frontend integration issues.
---
## Pattern: v1 to v2 Migration
**Critical changes to know:**
```python
# ❌ v1 (OLD - don't use)
from pydantic import validator
class Model(BaseModel):
class Config:
orm_mode = True
@validator("email")
def validate_email(cls, v):
return v.lower()
def dict(self):
...
# ✅ v2 (CURRENT)
from pydantic import field_validator, ConfigDict
class Model(BaseModel):
model_config = ConfigDict(from_attributes=True)
@field_validator("email")
@classmethod
def validate_email(cls, v: str) -> str:
return v.lower()
def model_dump(self):
...
```
**Quick reference:**
| v1 | v2 |
|----|-----|
| `class Config` | `model_config = ConfigDict(...)` |
| `orm_mode = True` | `from_attributes=True` |
| `.dict()` | `.model_dump()` |
| `.json()` | `.model_dump_json()` |
| `@validator` | `@field_validator` |
| `@root_validator` | `@model_validator` |
| `parse_obj()` | `model_validate()` |
| `update_forward_refs()` | `model_rebuild()` |
---
## Pattern: Field Validators
```python
from pydantic import BaseModel, field_validator, ValidationInfo
class AssessmentCreate(BaseModel):
title: str
skill_areas: list[str]
max_score: int
# Single field validator
@field_validator("tit