diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 8fcb1d62..f65ca15d 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -331,12 +331,12 @@ class ListField(BaseField): try: [self.field.validate(item) for item in value] except Exception, err: - raise ValidationError('Invalid ListField item (%s)' % str(err)) + raise ValidationError('Invalid ListField item (%s)' % str(item)) def prepare_query_value(self, op, value): if op in ('set', 'unset'): - return [self.field.to_mongo(v) for v in value] - return self.field.to_mongo(value) + return [self.field.prepare_query_value(op, v) for v in value] + return self.field.prepare_query_value(op, value) def lookup_member(self, member_name): return self.field.lookup_member(member_name) diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index 6e546564..a3d4c544 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -592,6 +592,10 @@ class QuerySet(object): mongo_query = {} for key, value in query.items(): + if key == "__raw__": + mongo_query.update(value) + continue + parts = key.split('__') indices = [(i, p) for i, p in enumerate(parts) if p.isdigit()] parts = [part for part in parts if not part.isdigit()] diff --git a/tests/fields.py b/tests/fields.py index e30f843e..1df484bf 100644 --- a/tests/fields.py +++ b/tests/fields.py @@ -545,6 +545,7 @@ class FieldTest(unittest.TestCase): user.save() user = User.objects(bookmarks__all=[post_1, link_1]).first() + print User.objects(bookmarks__all=[post_1, link_1]).explain() self.assertEqual(user.bookmarks[0], post_1) self.assertEqual(user.bookmarks[1], link_1)