Updated field filter logic - can now exclude subclass fields (#443)
This commit is contained in:
		| @@ -14,8 +14,9 @@ from pymongo.common import validate_read_preference | ||||
|  | ||||
| from mongoengine import signals | ||||
| from mongoengine.common import _import_class | ||||
| from mongoengine.base.common import get_document | ||||
| from mongoengine.errors import (OperationError, NotUniqueError, | ||||
|                                 InvalidQueryError) | ||||
|                                 InvalidQueryError, LookUpError) | ||||
|  | ||||
| from mongoengine.queryset import transform | ||||
| from mongoengine.queryset.field_list import QueryFieldList | ||||
| @@ -1333,13 +1334,33 @@ class BaseQuerySet(object): | ||||
|  | ||||
|         return frequencies | ||||
|  | ||||
|     def _fields_to_dbfields(self, fields): | ||||
|     def _fields_to_dbfields(self, fields, subdoc=False): | ||||
|         """Translate fields paths to its db equivalents""" | ||||
|         ret = [] | ||||
|         subclasses = [] | ||||
|         document = self._document | ||||
|         if document._meta['allow_inheritance']: | ||||
|             subclasses = [get_document(x) | ||||
|                           for x in document._subclasses][1:] | ||||
|         for field in fields: | ||||
|             field = ".".join(f.db_field for f in | ||||
|                              self._document._lookup_field(field.split('.'))) | ||||
|             ret.append(field) | ||||
|             try: | ||||
|                 field = ".".join(f.db_field for f in | ||||
|                                  document._lookup_field(field.split('.'))) | ||||
|                 ret.append(field) | ||||
|             except LookUpError, e: | ||||
|                 found = False | ||||
|                 for subdoc in subclasses: | ||||
|                     try: | ||||
|                         subfield = ".".join(f.db_field for f in | ||||
|                                         subdoc._lookup_field(field.split('.'))) | ||||
|                         ret.append(subfield) | ||||
|                         found = True | ||||
|                         break | ||||
|                     except LookUpError, e: | ||||
|                         pass | ||||
|  | ||||
|                 if not found: | ||||
|                     raise e | ||||
|         return ret | ||||
|  | ||||
|     def _get_order_by(self, keys): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user