Fixed distinct casting issue with ListField of EmbeddedDocuments (#470)

This commit is contained in:
Ross Lawley
2013-11-29 09:48:53 +00:00
parent 48a5679087
commit c28d9135d9
3 changed files with 31 additions and 2 deletions

View File

@@ -621,8 +621,15 @@ class BaseQuerySet(object):
try:
field = self._fields_to_dbfields([field]).pop()
finally:
return self._dereference(queryset._cursor.distinct(field), 1,
name=field, instance=self._document)
distinct = self._dereference(queryset._cursor.distinct(field), 1,
name=field, instance=self._document)
# We may need to cast to the correct type eg. ListField(EmbeddedDocumentField)
doc_field = getattr(self._document._fields.get(field), "field", None)
instance = getattr(doc_field, "document_type", False)
if instance:
distinct = [instance(**doc) for doc in distinct]
return distinct
def only(self, *fields):
"""Load only a subset of this document's fields. ::