High severity intermediate · Fix: 5-15 min

ValidationError

pydantic.ValidationError

What this error means
FastAPI apps using Pydantic v2 models fail validation due to breaking changes in Pydantic v2's model config and field validation behavior.

Stack trace

traceback
Traceback (most recent call last):
  File "/app/main.py", line 42, in <module>
    user = UserModel(**data)
  File "/usr/local/lib/python3.10/site-packages/pydantic/main.py", line 341, in __init__
    raise ValidationError(errors, model_cls)
pydantic.ValidationError: 1 validation error for UserModel
field_name
  field required (type=value_error.missing)
QUICK FIX
Update Pydantic models to use model_config dict and add explicit defaults for optional fields per Pydantic v2 requirements.

Why it happens

Pydantic v2 introduced significant changes to model validation, including stricter field requirements and new config options. FastAPI apps using Pydantic v1-style models or relying on implicit behaviors now encounter validation errors because fields must be explicitly declared and configured.

Detection

Monitor FastAPI startup logs and API request failures for pydantic.ValidationError exceptions referencing missing fields or config errors after upgrading to Pydantic v2.

Causes & fixes

1

Pydantic v2 requires explicit field defaults or default_factory for optional fields

✓ Fix

Add default values or use Field(default=...) for all optional fields in your Pydantic models.

2

Model config changed: 'Config' class replaced by 'model_config' dict in Pydantic v2

✓ Fix

Replace Config class with model_config dictionary in your Pydantic models to set config options.

3

FastAPI dependencies or extensions incompatible with Pydantic v2 validation changes

✓ Fix

Upgrade FastAPI and related packages to versions compatible with Pydantic v2 or pin Pydantic to v1.x until support is available.

Code: broken vs fixed

Broken - triggers the error
python
from pydantic import BaseModel

class UserModel(BaseModel):
    name: str
    age: int  # optional field without default

user = UserModel(name='Alice')  # Raises ValidationError: field required
Fixed - works correctly
python
import os
from pydantic import BaseModel, Field

class UserModel(BaseModel):
    name: str
    age: int | None = Field(default=None)  # Added default to fix validation

user = UserModel(name='Alice')  # Works correctly
print(user)
# Note: Use os.environ for API keys if needed
Added explicit default to optional field 'age' to comply with Pydantic v2 validation rules requiring defaults for optional fields.

Workaround

Catch pydantic.ValidationError exceptions and provide fallback defaults or transform input data before model instantiation to avoid crashes.

Prevention

Use Pydantic v2 model_config for configuration and always declare defaults for optional fields; test FastAPI apps thoroughly after Pydantic upgrades.

Python 3.9+ · fastapi >=0.95.0 · tested on 0.98.0
Verified 2026-04
Verify ↗

Community Notes

No notes yetBe the first to share a version-specific fix or tip.