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:
		| @@ -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): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user