Fixes saving document schemas that have changed

Ensures that form defaults which are documents are
automatically marked as changed, so schemas can evolve
without migration issues.

[#360]
This commit is contained in:
Ross Lawley
2011-11-22 07:34:08 -08:00
parent 34646a414c
commit 63c5a4dd65
4 changed files with 40 additions and 1 deletions

View File

@@ -883,14 +883,21 @@ class BaseDocument(object):
""".strip() % class_name)
cls = subclasses[class_name]
changed_fields = []
for field_name, field in cls._fields.items():
if field.db_field in data:
value = data[field.db_field]
data[field_name] = (value if value is None
else field.to_python(value))
elif field.default:
default = field.default
if callable(default):
default = default()
if isinstance(default, BaseDocument):
changed_fields.append(field_name)
obj = cls(**data)
obj._changed_fields = []
obj._changed_fields = changed_fields
return obj
def _mark_as_changed(self, key):