Keep updates type-safe
Mutable models whose fields may change after initialization.
Pydantic · Pipe
validate_assignment enables validation when fields are changed after a Pydantic model is created. It defaults to False, so post-construction assignments are otherwise not revalidated.
Set validate_assignment=True in a model’s configuration to validate values assigned after initialization. Pydantic then applies validation when model attributes change, rather than validating only during model creation.
class User(BaseModel, validate_assignment=True):
...
# or
model_config = ConfigDict(validate_assignment=True)validate_assignment controls whether Pydantic checks values assigned after the model has been created.model_config.from pydantic import BaseModel, ValidationError
class User(BaseModel, validate_assignment=True):
name: str
age: int
user = User(name="Ada", age=36)
user.age = "37"
assert user.age == 37
try:
user.age = "not an integer"
except ValidationError:
print("assignment rejected")The first assignment is converted to an integer; the second raises a validation error.
Mutable models whose fields may change after initialization.
Applications that modify validated state over time.
Models where accidental invalid assignments should fail immediately.
validate_assignment change?By default, Pydantic validates data when the model is created, but not when an attribute is changed. Enabling validate_assignment makes later assignments undergo validation too.
Follow-up: How can it be enabled? Use validate_assignment=True as a model class keyword argument or set it in model_config.
It can be enabled directly in the class definition with class User(BaseModel, validate_assignment=True). This causes assignments such as user.age = ... to be validated after construction.
Follow-up: What happens without the setting? An invalid value can be assigned without revalidation.
The setting is a configuration option whose default is False. With the default, validation occurs only during model creation; with it enabled, validation also occurs when model data changes.
Follow-up: Why might this matter? It preserves the model’s validation guarantees across its full mutable lifetime.
BaseModelConfigDictmodel_configValidationError