From f2c25b47448a6742fd08d7ce68c47dc85d1ce120 Mon Sep 17 00:00:00 2001 From: Dmytro Popovych Date: Sun, 20 Oct 2013 20:08:00 +0300 Subject: [PATCH 1/2] Error in GenericReferenceField serialization was fixed --- mongoengine/fields.py | 5 ++++- tests/fields/fields.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 036a00c2..c69d14e6 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -1022,7 +1022,10 @@ class GenericReferenceField(BaseField): id_ = id_field.to_mongo(id_) collection = document._get_collection_name() ref = DBRef(collection, id_) - return {'_cls': document._class_name, '_ref': ref} + return SON(( + ('_cls', document._class_name), + ('_ref', ref) + )) def prepare_query_value(self, op, value): if value is None: diff --git a/tests/fields/fields.py b/tests/fields/fields.py index 3d272181..52817479 100644 --- a/tests/fields/fields.py +++ b/tests/fields/fields.py @@ -1904,6 +1904,37 @@ class FieldTest(unittest.TestCase): Post.drop_collection() User.drop_collection() + def test_generic_reference_list_item_modification(self): + """Ensure that modifications of related documents (through generic reference) don't influence on querying + """ + class Post(Document): + title = StringField() + + class User(Document): + username = StringField() + bookmarks = ListField(GenericReferenceField()) + + Post.drop_collection() + User.drop_collection() + + post_1 = Post(title="Behind the Scenes of the Pavement Reunion") + post_1.save() + + user = User(bookmarks=[post_1]) + user.save() + + post_1.title = "Title was modified" + user.username = "New username" + user.save() + + user = User.objects(bookmarks__all=[post_1]).first() + + self.assertIsNotNone(user) + self.assertEqual(user.bookmarks[0], post_1) + + Post.drop_collection() + User.drop_collection() + def test_binary_fields(self): """Ensure that binary fields can be stored and retrieved. """ From 11d4f6499aa85646a5ba85f524e92681498e2a40 Mon Sep 17 00:00:00 2001 From: Dmytro Popovych Date: Sun, 20 Oct 2013 20:21:57 +0300 Subject: [PATCH 2/2] Python 2.5-2.6 compatibility fix --- tests/fields/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fields/fields.py b/tests/fields/fields.py index 52817479..3fc218fa 100644 --- a/tests/fields/fields.py +++ b/tests/fields/fields.py @@ -1929,7 +1929,7 @@ class FieldTest(unittest.TestCase): user = User.objects(bookmarks__all=[post_1]).first() - self.assertIsNotNone(user) + self.assertNotEqual(user, None) self.assertEqual(user.bookmarks[0], post_1) Post.drop_collection()