Skip to content

Pydantic Cheatsheet

Comprehensive Explanation of Each Setting

Model Configuration (ConfigDict)

validate_assignment=True - Validates data when you assign new values to fields after creating the model - Without this, user.age = "invalid" would work; with it, it raises a validation error

validate_default=True - Validates default values every time you create an instance - Normally defaults are trusted for performance; this ensures they're always valid

strict=False - Enables lax mode where Pydantic tries to coerce compatible types - strict=True would only accept exact type matches

coerce_numbers_to_str=True - Allows converting numbers to strings (normally disabled) - Example: 123"123" for string fields

extra='allow' - Allows extra fields not defined in the model - Options: 'ignore' (default), 'forbid', 'allow'

str_strip_whitespace=True - Automatically removes leading/trailing whitespace from strings - " hello " becomes "hello"

str_to_lower=False - When True, converts all strings to lowercase - Useful for case-insensitive fields

from_attributes=True - Allows creating models from objects with attributes (like ORM instances) - Replaces V1's orm_mode=True

populate_by_name=False - Allows population of fields using their Python names even if an alias is set

use_enum_values=False - When True, serializes enum fields using their values instead of names

json_schema_extra={} - Add extra metadata to the generated JSON schema

protected_namespaces=('model_',) - Prevents assignment to attributes with these prefixes

arbitrary_types_allowed=False - When True, allows arbitrary (non-Pydantic) types as fields

Field Configuration (Field())

Validation Constraints: - min_length/max_length: String and collection length limits - gt/ge/lt/le: Numeric comparison constraints - pattern: Regular expression validation - multiple_of: Number must be multiple of specified value

Aliases: - alias: Name used for both validation and serialization - validation_alias: Only affects input validation - serialization_alias: Only affects output serialization

Metadata: - description: Human-readable field description - examples: Example values for documentation - title: Human-readable title

Special Behaviors: - frozen=True: Makes field immutable after creation - exclude=True: Excludes field from serialization - union_mode: Controls how unions are validated - default_factory: Callable to generate default value at runtime

Custom Validation

@field_validator - Validates individual fields with custom logic - Replaces V1's @validator

@model_validator - Validates the entire model after all fields are processed - Can access multiple fields for cross-field validation

Custom Serialization

@field_serializer - Customizes how individual fields are serialized to dict/JSON

@model_serializer - Customizes how the entire model is serialized - Can add computed fields or modify the output structure

Special Types

PositiveInt: Integer that must be > 0

EmailStr: Validates email format (requires email-validator)

HttpUrl: Validates and normalizes URLs

SecretStr: Hides sensitive data in output

StrictInt/StrictStr: Only accepts exact type matches

UUID: Validates and parses UUID strings

conlist: List with length and item constraints

constr: String with length and pattern constraints

Json: Field that parses and validates JSON data