diff --git a/mongoengine/dereference.py b/mongoengine/dereference.py index 84c57bb8..f74e224c 100644 --- a/mongoengine/dereference.py +++ b/mongoengine/dereference.py @@ -166,7 +166,7 @@ class DeReference(object): else: data[k] = v - if k in self.object_map: + if k in self.object_map and not is_list: data[k] = self.object_map[k] elif hasattr(v, '_fields'): for field_name, field in v._fields.iteritems(): diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index e3b2d99e..04d46414 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -813,11 +813,10 @@ class QuerySet(object): have to create a new document. Passes any write_options onto :meth:`~mongoengine.Document.save` - .. versionadded:: 0.3 - :param auto_save: if the object is to be saved automatically if not found. - .. versionadded:: 0.6 + .. versionadded:: 0.3 + .. versionupdated:: 0.6 - added `auto_save` """ defaults = query.get('defaults', {}) if 'defaults' in query: diff --git a/tests/test_dereference.py b/tests/test_dereference.py index 9f0d4330..826d4aa7 100644 --- a/tests/test_dereference.py +++ b/tests/test_dereference.py @@ -810,7 +810,7 @@ class FieldTest(unittest.TestCase): room = Room.objects.first().select_related() self.assertEquals(room.staffs_with_position[0]['staff'], sarah) self.assertEquals(room.staffs_with_position[1]['staff'], bob) - + def test_document_reload_no_inheritance(self): class Foo(Document): meta = {'allow_inheritance': False} @@ -841,3 +841,25 @@ class FieldTest(unittest.TestCase): self.assertEquals(type(foo.bar), Bar) self.assertEquals(type(foo.baz), Baz) + + def test_list_lookup_not_checked_in_map(self): + """Ensure we dereference list data correctly + """ + class Comment(Document): + id = IntField(primary_key=True) + text = StringField() + + class Message(Document): + id = IntField(primary_key=True) + comments = ListField(ReferenceField(Comment)) + + Comment.drop_collection() + Message.drop_collection() + + c1 = Comment(id=0, text='zero').save() + c2 = Comment(id=1, text='one').save() + Message(id=1, comments=[c1, c2]).save() + + msg = Message.objects.get(id=1) + self.assertEqual(0, msg.comments[0].id) + self.assertEqual(1, msg.comments[1].id) \ No newline at end of file