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()