From 6419a8d09adea4b3ad7a1f293c3da92ad517a3af Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Fri, 2 Dec 2011 06:03:15 -0800 Subject: [PATCH] Fixed False BooleanField marked as unset by _delta() Closes #282 --- docs/changelog.rst | 1 + mongoengine/base.py | 2 +- tests/document.py | 13 +++++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 30d67074..157409e3 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,7 @@ Changelog Changes in dev ============== +- Fixed issue saving False booleans - Fixed issue with dynamic documents deltas - Added Reverse Delete Rule support to ListFields - MapFields aren't supported - Added customisable cascade kwarg options diff --git a/mongoengine/base.py b/mongoengine/base.py index 88324bbe..67551501 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -978,7 +978,7 @@ class BaseDocument(object): # Determine if any changed items were actually unset. for path, value in set_data.items(): - if value: + if value or isinstance(value, bool): continue # If we've set a value that ain't the default value dont unset it. diff --git a/tests/document.py b/tests/document.py index a4f09929..bf8946f4 100644 --- a/tests/document.py +++ b/tests/document.py @@ -2459,5 +2459,18 @@ class DocumentTest(unittest.TestCase): a.reload() self.assertEquals(a.b.field2.c_field, 'new value') + def test_can_save_false_values(self): + class Doc(Document): + foo = StringField() + archived = BooleanField(default=False, required=True) + + Doc.drop_collection() + d = Doc() + d.save() + d.archived = False + d.save() + + self.assertEquals(Doc.objects(archived=False).count(), 1) + if __name__ == '__main__': unittest.main()