From 5c3d91e65e5bf38932ad54659ab60820b8cd37db Mon Sep 17 00:00:00 2001 From: David Bordeynik Date: Mon, 16 Feb 2015 12:25:37 +0200 Subject: [PATCH] Fix #866: does not follow --- docs/changelog.rst | 1 + mongoengine/base/datastructures.py | 4 ++++ tests/fields/fields.py | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index e70fc8e3..a90b2373 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,7 @@ Changelog Changes in 0.9.X - DEV ====================== +- `BaseDict` does not follow `setdefault` #866 - Add support for $type operator # 766 - Fix tests for pymongo 2.8+ #877 - No module named 'django.utils.importlib' (Django dev) #872 diff --git a/mongoengine/base/datastructures.py b/mongoengine/base/datastructures.py index abe41a14..022338d7 100644 --- a/mongoengine/base/datastructures.py +++ b/mongoengine/base/datastructures.py @@ -75,6 +75,10 @@ class BaseDict(dict): self._mark_as_changed() return super(BaseDict, self).popitem(*args, **kwargs) + def setdefault(self, *args, **kwargs): + self._mark_as_changed() + return super(BaseDict, self).setdefault(*args, **kwargs) + def update(self, *args, **kwargs): self._mark_as_changed() return super(BaseDict, self).update(*args, **kwargs) diff --git a/tests/fields/fields.py b/tests/fields/fields.py index ab220b25..8e957c68 100644 --- a/tests/fields/fields.py +++ b/tests/fields/fields.py @@ -1176,6 +1176,11 @@ class FieldTest(unittest.TestCase): post.reload() self.assertEqual('updated', post.info['title']) + post.info.setdefault('authors', []) + post.save() + post.reload() + self.assertEqual([], post.info['authors']) + BlogPost.drop_collection() def test_dictfield_strict(self):