diff --git a/mongoengine/base/document.py b/mongoengine/base/document.py index c2ccc488..e3202b9d 100644 --- a/mongoengine/base/document.py +++ b/mongoengine/base/document.py @@ -141,16 +141,16 @@ class BaseDocument(object): super(BaseDocument, self).__setattr__(name, value) def __getstate__(self): - removals = ("get_%s_display" % k - for k, v in self._fields.items() if v.choices) - for k in removals: - if hasattr(self, k): - delattr(self, k) - return self.__dict__ + data = {} + for k in ('_changed_fields', '_initialised', '_created'): + data[k] = getattr(self, k) + data['_data'] = self.to_mongo() + return data - def __setstate__(self, __dict__): - self.__dict__ = __dict__ - self.__set_field_display() + def __setstate__(self, data): + for k in ('_changed_fields', '_initialised', '_created'): + setattr(self, k, data[k]) + self._data = self.__class__._from_son(data["_data"])._data def __iter__(self): if 'id' in self._fields and 'id' not in self._fields_ordered: diff --git a/tests/fixtures.py b/tests/fixtures.py index a35f1443..e2070443 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -25,11 +25,11 @@ class PickleSignalsTest(Document): @classmethod def post_save(self, sender, document, created, **kwargs): - pickled = pickle.dumps(document) + pickled = pickle.dumps(document) @classmethod def post_delete(self, sender, document, **kwargs): - pickled = pickle.dumps(document) + pickled = pickle.dumps(document) signals.post_save.connect(PickleSignalsTest.post_save, sender=PickleSignalsTest) signals.post_delete.connect(PickleSignalsTest.post_delete, sender=PickleSignalsTest)