diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 55e5addb..75008d6f 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -348,6 +348,11 @@ class DictField(BaseField): .. versionadded:: 0.3 """ + def __init__(self, basecls=None, *args, **kwargs): + self.basecls = basecls or BaseField + assert issubclass(self.basecls, BaseField) + super(DictField, self).__init__(*args, **kwargs) + def validate(self, value): """Make sure that a list of valid fields is being used. """ @@ -360,7 +365,7 @@ class DictField(BaseField): 'contain "." or "$" characters') def lookup_member(self, member_name): - return BaseField(db_field=member_name) + return self.basecls(db_field=member_name) class GeoLocationField(DictField): """Supports geobased fields""" diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index 396a745c..11b5321a 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -313,7 +313,7 @@ class QuerySet(object): op = None if parts[-1] in operators + match_operators: op = parts.pop() - + if _doc_cls: # Switch field names to proper names [set in Field(name='foo')] fields = QuerySet._lookup_field(_doc_cls, parts)