Behaviour of pydantic can be controlled via the Config
class on a model.
Options:
title
: the title for the generated JSON Schema
anystr_strip_whitespace
: whether to strip leading and trailing whitespace for str & byte types (default: False
)
min_anystr_length
: the min length for str & byte types (default: 0
)
max_anystr_length
: the max length for str & byte types (default: 2 ** 16
)
validate_all
: whether to validate field defaults (default: False
)
extra
: whether to ignore, allow, or forbid extra attributes during model initialization. Accepts the string values of
'ignore'
, 'allow'
, or 'forbid'
, or values of the Extra
enum (default: Extra.ignore
).
'forbid'
will cause validation to fail if extra attributes are included, 'ignore'
will silently ignore any extra attributes,
and 'allow'
will assign the attributes to the model.
allow_mutation
: whether or not models are faux-immutable, i.e. whether __setattr__
is allowed (default: True
)
use_enum_values
: whether to populate models with the value
property of enums, rather than the raw enum.
This may be useful if you want to serialise model.dict()
later (default: False
)
fields
: a dict
containing schema information for each field; this is equivalent to
using the Field
class (default: None
)
validate_assignment
: whether to perform validation on assignment to attributes (default: False
)
allow_population_by_field_name
: whether an aliased field may be populated by its name as given by the model
attribute, as well as the alias (default: False
)
!!! note
The name of this configuration setting was changed in v1.0 from
allow_population_by_alias
to allow_population_by_field_name
.
error_msg_templates
: a dict
used to override the default error message templates.
Pass in a dictionary with keys matching the error messages you want to override (default: {}
)
arbitrary_types_allowed
: whether to allow arbitrary user types for fields (they are validated simply by
checking if the value is an instance of the type). If False
, RuntimeError
will be
raised on model declaration (default: False
). See an example in
Field Types.
orm_mode
: whether to allow usage of ORM mode
getter_dict
: a custom class (which should inherit from GetterDict
) to use when decomposing ORM classes for validation,
for use with orm_mode
alias_generator
: a callable that takes a field name and returns an alias for it
keep_untouched
: a tuple of types (e.g. descriptors) for a model's default values that should not be changed during model creation and will
not be included in the model schemas. Note: this means that attributes on the model with defaults of this type, not annotations of this type, will be left alone.
schema_extra
: a dict
used to extend/update the generated JSON Schema, or a callable to post-process it; see Schema customization
json_loads
: a custom function for decoding JSON; see custom JSON (de)serialisation
json_dumps
: a custom function for encoding JSON; see custom JSON (de)serialisation
json_encoders
: a dict
used to customise the way types are encoded to JSON; see JSON Serialisation
{!.tmp_examples/model_config_main.py!}
(This script is complete, it should run "as is")
Similarly, if using the @dataclass
decorator:
{!.tmp_examples/model_config_dataclass.py!}
(This script is complete, it should run "as is")
underscore_attrs_are_private
: whether to treat any underscore non-class var attrs as private, or leave them as is; See Private model attributes
If data source field names do not match your code style (e. g. CamelCase fields),
you can automatically generate aliases using alias_generator
:
{!.tmp_examples/model_config_alias_generator.py!}
(This script is complete, it should run "as is")
Here camel case refers to "upper camel case" aka pascal case
e.g. CamelCase
. If you'd like instead to use lower camel case e.g. camelCase
,
it should be trivial to modify the to_camel
function above.
!!! warning Alias priority logic changed in v1.4 to resolve buggy and unexpected behaviour in previous versions. In some circumstances this may represent a breaking change, see #1178 and the precedence order below for details.
In the case where a field's alias may be defined in multiple places, the selected value is determined as follows (in descending order of priority):
- Set via
Field(..., alias=<alias>)
, directly on the model - Defined in
Config.fields
, directly on the model - Set via
Field(..., alias=<alias>)
, on a parent model - Defined in
Config.fields
, on a parent model - Generated by
alias_generator
, regardless of whether it's on the model or a parent
!!! note
This means an alias_generator
defined on a child model does not take priority over an alias defined
on a field in a parent model.
For example:
{!.tmp_examples/model_config_alias_precedence.py!}
(This script is complete, it should run "as is")