From cf4a45da118e7adf3cecf6084159f80cce1d9bb6 Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Tue, 6 Dec 2011 06:38:25 -0800 Subject: [PATCH] Dynamic Documents now support string query lookups --- mongoengine/base.py | 6 ++++++ tests/dynamic_document.py | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/mongoengine/base.py b/mongoengine/base.py index c11b6278..38e528f6 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -412,6 +412,12 @@ class BaseDynamicField(BaseField): def lookup_member(self, member_name): return member_name + def prepare_query_value(self, op, value): + if isinstance(value, basestring): + from mongoengine.fields import StringField + return StringField().prepare_query_value(op, value) + return self.to_mongo(value) + class ObjectIdField(BaseField): """An field wrapper around MongoDB's ObjectIds. diff --git a/tests/dynamic_document.py b/tests/dynamic_document.py index 6363672b..0eeedfa4 100644 --- a/tests/dynamic_document.py +++ b/tests/dynamic_document.py @@ -98,6 +98,27 @@ class DynamicDocTest(unittest.TestCase): p = p.get() self.assertEquals(22, p.age) + def test_complex_dynamic_document_queries(self): + class Person(DynamicDocument): + name = StringField() + + Person.drop_collection() + + p = Person(name="test") + p.age = "ten" + p.save() + + p1 = Person(name="test1") + p1.age = "less then ten and a half" + p1.save() + + p2 = Person(name="test2") + p2.age = 10 + p2.save() + + self.assertEquals(Person.objects(age__icontains='ten').count(), 2) + self.assertEquals(Person.objects(age__gte=10).count(), 1) + def test_complex_data_lookups(self): """Ensure you can query dynamic document dynamic fields""" p = self.Person()