Skip to main content

Pydantic Field Reference

Quick-lookup reference for Pydantic v2 BaseModel definitions, Field constraints, validators, model_config options, and serialization/deserialization methods.

Learning Focus

By the end of this reference you can: quickly recall Pydantic v2 syntax for models, fields, validators, config, and the v1→v2 migration map.

BaseModel Definition

from pydantic import BaseModel, Field, ConfigDict

class MyModel(BaseModel):
model_config = ConfigDict(
from_attributes=True, # ORM mode
populate_by_name=True, # Allow field name + alias
str_strip_whitespace=True,
use_enum_values=True,
extra="ignore", # "ignore" | "allow" | "forbid"
)

Field Types

str String
int Integer
float Float
bool Boolean
bytes Raw bytes
datetime ISO 8601 string auto-parsed
date Date string
time Time string
UUID UUID string validated
Decimal Precise decimal
list[T] Typed list
tuple[T, ...] Typed tuple
dict[str, T] Typed dict
set[T] Typed set
T | None Optional T
Union[T, U] T or U
Literal["a","b"] Exact values
EmailStr Validated email (email-validator)
HttpUrl Validated URL
AnyUrl Any URL

Field() Constraints

Field(...) Required field (no default)
Field(default) Optional with default
Field(default_factory=list) Callable default

# String constraints
min_length=N
max_length=N
pattern=r"regex"
strip_whitespace=True

# Numeric constraints
gt=N # >
ge=N # >=
lt=N # <
le=N # <=
multiple_of=N

# Other
alias="externalName"
serialization_alias="outputName"
exclude=True # Never serialized
title="Field Title"
description="Description"
examples=["example"]

Validators

from pydantic import field_validator, model_validator

# Field validator
@field_validator("username")
@classmethod
def validate_username(cls, v: str) -> str:
return v.lower()

# Model validator (after all fields)
@model_validator(mode="after")
def check_passwords(self) -> "Model":
if self.password != self.confirm_password:
raise ValueError("Passwords must match")
return self

# Computed field
from pydantic import computed_field

@computed_field
@property
def full_name(self) -> str:
return f"{self.first_name} {self.last_name}"

Serialization

model = MyModel(...)

model.model_dump() # dict
model.model_dump(mode="json") # JSON-safe dict
model.model_dump(by_alias=True) # Use aliases as keys
model.model_dump(exclude={"password"}) # Exclude fields
model.model_dump(include={"id", "name"}) # Include only these
model.model_dump(exclude_none=True) # Omit None values
model.model_dump(exclude_unset=True) # Omit unset fields

model.model_dump_json() # JSON string

# Parse from dict/object
MyModel.model_validate(data_dict) # From dict
MyModel.model_validate(orm_object) # From ORM (from_attributes=True)
MyModel.model_validate_json(json_str) # From JSON string

Common Pydantic v1 → v2 Changes

.dict() → .model_dump()
.json() → .model_dump_json()
.parse_obj() → .model_validate()
.parse_raw() → .model_validate_json()
class Config → model_config = ConfigDict(...)
orm_mode=True → from_attributes=True
@validator → @field_validator
@root_validator → @model_validator
schema_extra → json_schema_extra

Common Pitfalls

PitfallCause / SymptomFix
model.dict() raises AttributeErrorUsing Pydantic v1 API on v2Use model.model_dump() instead
from_attributes not workingForgot model_config or used v1 orm_modeSet model_config = ConfigDict(from_attributes=True)
Extra fields silently acceptedDefault extra="ignore" in Pydantic v2Set extra="forbid" to reject unknown fields

Hands-On Practice

quick-pydantic-test.py
from pydantic import BaseModel, Field, field_validator, ConfigDict

class OrderItem(BaseModel):
model_config = ConfigDict(from_attributes=True, extra="forbid")
product: str = Field(..., min_length=1)
quantity: int = Field(..., ge=1)
price: float = Field(..., gt=0)

@field_validator("product")
@classmethod
def strip_product(cls, v: str) -> str:
return v.strip()

item = OrderItem(product=" Widget ", quantity=2, price=19.99)
print(item.model_dump()) # {'product': 'Widget', 'quantity': 2, 'price': 19.99}

# Verify validation
try:
OrderItem(product="", quantity=2, price=19.99)
print("Should have raised ValidationError")
except Exception as e:
print(f"Validation caught: {type(e).__name__}")

What's Next