As of version 1.8.0 (yet to be released), there are 2 ways to specify default values behaving differently :
Requiredmarker from Onctuous
__default__ is only taken into account when instanciating a new object, default value from
Required marker will be loaded each time
validate is called, that is to say at least at each
Moreover, when using it into a sub-dict (i.e in a nested schema, not the parent one) it will also be loaded whenever an Object in loaded from the database.
This is a quite tricky part of DynamoDB-Mapper:
_dynamodb_to_python basically reproduces the Onctuous dict validator behavior, default excepted. This is intended to preserve backward-compatibility.