Handle updating and getting None values
Fixes updating a field to None, so it works in a similar fashion as unsetting it via save() Updated to handle null data from the database Fixes #362
This commit is contained in:
		| @@ -751,6 +751,13 @@ class BaseDocument(object): | ||||
|                 self._data[name] = value | ||||
|                 if hasattr(self, '_changed_fields'): | ||||
|                     self._mark_as_changed(name) | ||||
|  | ||||
|         # Handle None values for required fields | ||||
|         if value is None and name in getattr(self, '_fields', {}): | ||||
|             self._data[name] = value | ||||
|             if hasattr(self, '_changed_fields'): | ||||
|                 self._mark_as_changed(name) | ||||
|             return | ||||
|         super(BaseDocument, self).__setattr__(name, value) | ||||
|  | ||||
|     def __expand_dynamic_values(self, name, value): | ||||
|   | ||||
| @@ -694,8 +694,7 @@ class QuerySet(object): | ||||
|                 elif op in ('in', 'nin', 'all', 'near'): | ||||
|                     # 'in', 'nin' and 'all' require a list of values | ||||
|                     value = [field.prepare_query_value(op, v) for v in value] | ||||
|                  | ||||
|                  | ||||
|  | ||||
|             # if op and op not in match_operators: | ||||
|             if op: | ||||
|                 if op in geo_operators: | ||||
| @@ -1301,7 +1300,8 @@ class QuerySet(object): | ||||
|                 field = cleaned_fields[-1] | ||||
|  | ||||
|                 if op in (None, 'set', 'push', 'pull', 'addToSet'): | ||||
|                     value = field.prepare_query_value(op, value) | ||||
|                     if field.required or value is not None: | ||||
|                         value = field.prepare_query_value(op, value) | ||||
|                 elif op in ('pushAll', 'pullAll'): | ||||
|                     value = [field.prepare_query_value(op, v) for v in value] | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user