@@ -1722,33 +1722,42 @@ def _item_frequencies_exec_js(self, field, normalize=False):
17221722 return frequencies
17231723
17241724 def _fields_to_dbfields (self , fields ):
1725- """Translate fields paths to its db equivalents"""
1726- ret = []
1725+ """Translate fields' paths to their db equivalents."""
17271726 subclasses = []
1728- document = self ._document
1729- if document ._meta ['allow_inheritance' ]:
1727+ if self ._document ._meta ['allow_inheritance' ]:
17301728 subclasses = [get_document (x )
1731- for x in document ._subclasses ][1 :]
1729+ for x in self ._document ._subclasses ][1 :]
1730+
1731+ db_field_paths = []
17321732 for field in fields :
1733+ field_parts = field .split ('.' )
17331734 try :
1734- field = '.' .join (f if isinstance (f , six .string_types ) else f .db_field for f in
1735- document ._lookup_field (field .split ('.' )))
1736- ret .append (field )
1735+ field = '.' .join (
1736+ f if isinstance (f , six .string_types ) else f .db_field
1737+ for f in self ._document ._lookup_field (field_parts )
1738+ )
1739+ db_field_paths .append (field )
17371740 except LookUpError as err :
17381741 found = False
1742+
1743+ # If a field path wasn't found on the main document, go
1744+ # through its subclasses and see if it exists on any of them.
17391745 for subdoc in subclasses :
17401746 try :
1741- subfield = '.' .join (f if isinstance (f , six .string_types ) else f .db_field for f in
1742- subdoc ._lookup_field (field .split ('.' )))
1743- ret .append (subfield )
1747+ subfield = '.' .join (
1748+ f if isinstance (f , six .string_types ) else f .db_field
1749+ for f in subdoc ._lookup_field (field_parts )
1750+ )
1751+ db_field_paths .append (subfield )
17441752 found = True
17451753 break
17461754 except LookUpError :
17471755 pass
17481756
17491757 if not found :
17501758 raise err
1751- return ret
1759+
1760+ return db_field_paths
17521761
17531762 def _get_order_by (self , keys ):
17541763 """Given a list of MongoEngine-style sort keys, return a list
0 commit comments