From b451cc567d1d3d461a1d15dace37fb79f88a5279 Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Mon, 15 Apr 2013 07:59:24 +0000 Subject: [PATCH] Return '_id' as the key for document.id in _data dictionary * Re #146 Conflicts: mongoengine/base.py --- mongoengine/base.py | 6 +++--- tests/test_document.py | 20 ++++++++++++++++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/mongoengine/base.py b/mongoengine/base.py index 25c3bbd5..7e6d0aa7 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -192,7 +192,7 @@ class BaseField(object): return self # Get value from document instance if available, if not use default - value = instance._data.get(self.name) + value = instance._data.get(self.name or self.db_field) if value is None: value = self.default @@ -207,9 +207,9 @@ class BaseField(object): """ changed = False if (self.name not in instance._data or - instance._data[self.name] != value): + instance._data[self.name or self.db_field] != value): changed = True - instance._data[self.name] = value + instance._data[self.name or self.db_field] = value if changed and instance._initialised: instance._mark_as_changed(self.name) diff --git a/tests/test_document.py b/tests/test_document.py index 3e8d8134..b5542c25 100644 --- a/tests/test_document.py +++ b/tests/test_document.py @@ -1529,8 +1529,10 @@ class DocumentTest(unittest.TestCase): doc.validate() keys = doc._data.keys() self.assertEqual(2, len(keys)) - self.assertTrue(None in keys) self.assertTrue('e' in keys) + # Ensure that the _id field has the right id + self.assertTrue('_id' in keys) + self.assertEqual(doc._data.get('_id'), doc.id) def test_save(self): """Ensure that a document may be saved in the database. @@ -3368,6 +3370,21 @@ class DocumentTest(unittest.TestCase): } ) ]), "1,2") + def test_data_contains_idfield(self): + """Ensure that asking for _data returns 'id' + """ + class Person(Document): + name = StringField() + + Person.drop_collection() + person = Person() + person.name = "Harry Potter" + person.save(cascade=False) + + person = Person.objects.first() + self.assertTrue('_id' in person._data.keys()) + self.assertEqual(person._data.get('_id'), person.id) + class ValidatorErrorTest(unittest.TestCase): @@ -3521,6 +3538,5 @@ class ValidatorErrorTest(unittest.TestCase): self.assertRaises(OperationError, change_shard_key) - if __name__ == '__main__': unittest.main()