Fix clear_changed_fields() clearing unsaved documents bug #602
This commit is contained in:
parent
5be5685a09
commit
cd63865d31
1
AUTHORS
1
AUTHORS
@ -196,3 +196,4 @@ that much better:
|
|||||||
* Polyrabbit (https://github.com/polyrabbit)
|
* Polyrabbit (https://github.com/polyrabbit)
|
||||||
* Sagiv Malihi (https://github.com/sagivmalihi)
|
* Sagiv Malihi (https://github.com/sagivmalihi)
|
||||||
* Dmitry Konishchev (https://github.com/KonishchevDmitry)
|
* Dmitry Konishchev (https://github.com/KonishchevDmitry)
|
||||||
|
* Martyn Smith (https://github.com/martynsmith)
|
||||||
|
@ -6,6 +6,7 @@ Changelog
|
|||||||
Changes in 0.9.X - DEV
|
Changes in 0.9.X - DEV
|
||||||
======================
|
======================
|
||||||
|
|
||||||
|
- Fix clear_changed_fields() clearing unsaved documents bug #602
|
||||||
- Removing support for Django 1.4.x, pymongo 2.5.x, pymongo 2.6.x.
|
- Removing support for Django 1.4.x, pymongo 2.5.x, pymongo 2.6.x.
|
||||||
- Removing support for Python < 2.6.6
|
- Removing support for Python < 2.6.6
|
||||||
- Fixed $maxDistance location for geoJSON $near queries with MongoDB 2.6+ #664
|
- Fixed $maxDistance location for geoJSON $near queries with MongoDB 2.6+ #664
|
||||||
|
@ -16,7 +16,7 @@ from mongoengine.errors import (ValidationError, InvalidDocumentError,
|
|||||||
from mongoengine.python_support import PY3, txt_type
|
from mongoengine.python_support import PY3, txt_type
|
||||||
|
|
||||||
from mongoengine.base.common import get_document, ALLOW_INHERITANCE
|
from mongoengine.base.common import get_document, ALLOW_INHERITANCE
|
||||||
from mongoengine.base.datastructures import BaseDict, BaseList, StrictDict, SemiStrictDict
|
from mongoengine.base.datastructures import BaseDict, BaseList, StrictDict, SemiStrictDict
|
||||||
from mongoengine.base.fields import ComplexBaseField
|
from mongoengine.base.fields import ComplexBaseField
|
||||||
|
|
||||||
__all__ = ('BaseDocument', 'NON_FIELD_ERRORS')
|
__all__ = ('BaseDocument', 'NON_FIELD_ERRORS')
|
||||||
@ -54,12 +54,12 @@ class BaseDocument(object):
|
|||||||
values[name] = value
|
values[name] = value
|
||||||
__auto_convert = values.pop("__auto_convert", True)
|
__auto_convert = values.pop("__auto_convert", True)
|
||||||
signals.pre_init.send(self.__class__, document=self, values=values)
|
signals.pre_init.send(self.__class__, document=self, values=values)
|
||||||
|
|
||||||
if self.STRICT and not self._dynamic:
|
if self.STRICT and not self._dynamic:
|
||||||
self._data = StrictDict.create(allowed_keys=self._fields.keys())()
|
self._data = StrictDict.create(allowed_keys=self._fields.keys())()
|
||||||
else:
|
else:
|
||||||
self._data = SemiStrictDict.create(allowed_keys=self._fields.keys())()
|
self._data = SemiStrictDict.create(allowed_keys=self._fields.keys())()
|
||||||
|
|
||||||
self._dynamic_fields = SON()
|
self._dynamic_fields = SON()
|
||||||
|
|
||||||
# Assign default values to instance
|
# Assign default values to instance
|
||||||
@ -150,7 +150,7 @@ class BaseDocument(object):
|
|||||||
try:
|
try:
|
||||||
self__initialised = self._initialised
|
self__initialised = self._initialised
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
self__initialised = False
|
self__initialised = False
|
||||||
# Check if the user has created a new instance of a class
|
# Check if the user has created a new instance of a class
|
||||||
if (self._is_document and self__initialised
|
if (self._is_document and self__initialised
|
||||||
and self__created and name == self._meta['id_field']):
|
and self__created and name == self._meta['id_field']):
|
||||||
@ -407,6 +407,8 @@ class BaseDocument(object):
|
|||||||
else:
|
else:
|
||||||
data = getattr(data, part, None)
|
data = getattr(data, part, None)
|
||||||
if hasattr(data, "_changed_fields"):
|
if hasattr(data, "_changed_fields"):
|
||||||
|
if hasattr(data, "_is_document") and data._is_document:
|
||||||
|
continue
|
||||||
data._changed_fields = []
|
data._changed_fields = []
|
||||||
self._changed_fields = []
|
self._changed_fields = []
|
||||||
|
|
||||||
@ -596,7 +598,7 @@ class BaseDocument(object):
|
|||||||
msg = ("Invalid data to create a `%s` instance.\n%s"
|
msg = ("Invalid data to create a `%s` instance.\n%s"
|
||||||
% (cls._class_name, errors))
|
% (cls._class_name, errors))
|
||||||
raise InvalidDocumentError(msg)
|
raise InvalidDocumentError(msg)
|
||||||
|
|
||||||
if cls.STRICT:
|
if cls.STRICT:
|
||||||
data = dict((k, v) for k,v in data.iteritems() if k in cls._fields)
|
data = dict((k, v) for k,v in data.iteritems() if k in cls._fields)
|
||||||
obj = cls(__auto_convert=False, **data)
|
obj = cls(__auto_convert=False, **data)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user