diff --git a/docs/changelog.rst b/docs/changelog.rst index 069872ec..3c0b6422 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -14,6 +14,7 @@ Changes in 0.10.6 - Add support for mocking MongoEngine based on mongomock. #1151 - Fixed not being able to run tests on Windows. #1153 - Allow creation of sparse compound indexes. #1114 +- count on ListField of EmbeddedDocumentField fails. #1187 Changes in 0.10.5 ================= diff --git a/mongoengine/fields.py b/mongoengine/fields.py index ba505fb5..b681ac39 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -696,7 +696,7 @@ class ListField(ComplexBaseField): def prepare_query_value(self, op, value): if self.field: - if op in ('set', 'unset') and ( + if op in ('set', 'unset', None) and ( not isinstance(value, basestring) and not isinstance(value, BaseDocument) and hasattr(value, '__iter__')): diff --git a/tests/queryset/queryset.py b/tests/queryset/queryset.py index a9a2536a..f6a522af 100644 --- a/tests/queryset/queryset.py +++ b/tests/queryset/queryset.py @@ -3613,6 +3613,15 @@ class QuerySetTest(unittest.TestCase): self.assertEqual(MyDoc.objects.count(), 10) self.assertEqual(MyDoc.objects.none().count(), 0) + def test_count_list_embedded(self): + class B(EmbeddedDocument): + c = StringField() + + class A(Document): + b = ListField(EmbeddedDocumentField(B)) + + self.assertEqual(A.objects(b=[{'c': 'c'}]).count(), 0) + def test_call_after_limits_set(self): """Ensure that re-filtering after slicing works """ @@ -4899,5 +4908,6 @@ class QuerySetTest(unittest.TestCase): self.assertEqual(1, Doc.objects(item__type__="axe").count()) + if __name__ == '__main__': unittest.main()