From 90e5e5dfa9dbae98aa648d311e7f3a92c8a604f0 Mon Sep 17 00:00:00 2001 From: Harry Marr Date: Mon, 28 Dec 2009 01:39:29 +0000 Subject: [PATCH] Fixed delete(), resolved item_frequencies field --- mongoengine/document.py | 2 +- mongoengine/queryset.py | 37 +++++++++++++++++++++++-------------- tests/queryset.py | 2 +- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/mongoengine/document.py b/mongoengine/document.py index 49ff238a..b9093caa 100644 --- a/mongoengine/document.py +++ b/mongoengine/document.py @@ -52,7 +52,7 @@ class Document(BaseDocument): will only take effect if the document has been previously saved. """ object_id = self._fields['id'].to_mongo(self.id) - self.__class__.objects(_id=object_id).delete() + self.__class__.objects(id=object_id).delete() @classmethod def drop_collection(cls): diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index af78e5b2..526fe861 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -51,6 +51,27 @@ class QuerySet(object): if not self._cursor_obj: self._cursor_obj = self._collection.find(self._query) return self._cursor_obj + + @classmethod + def _translate_field_name(cls, document, parts): + """Translate a field attribute name to a database field name. + """ + if not isinstance(parts, (list, tuple)): + parts = [parts] + field_names = [] + field = None + for field_name in parts: + if field is None: + # Look up first field from the document + field = document._fields[field_name] + else: + # Look up subfield on the previous field + field = field.lookup_member(field_name) + if field is None: + raise InvalidQueryError('Cannot resolve field "%s"' + % field_name) + field_names.append(field.name) + return field_names @classmethod def _transform_query(cls, _doc_cls=None, **query): @@ -70,20 +91,7 @@ class QuerySet(object): # Switch field names to proper names [set in Field(name='foo')] if _doc_cls: - field_names = [] - field = None - for field_name in parts: - if field is None: - # Look up first field from the document - field = _doc_cls._fields[field_name] - else: - # Look up subfield on the previous field - field = field.lookup_member(field_name) - if field is None: - raise InvalidQueryError('Cannot resolve field "%s"' - % field_name) - field_names.append(field.name) - parts = field_names + parts = QuerySet._translate_field_name(_doc_cls, parts) key = '.'.join(parts) if op is None or key not in mongo_query: @@ -192,6 +200,7 @@ class QuerySet(object): the whole queried set of documents, and their corresponding frequency. This is useful for generating tag clouds, or searching documents. """ + list_field = QuerySet._translate_field_name(self._document, list_field) freq_func = """ function(collection, query, listField) { var frequencies = {}; diff --git a/tests/queryset.py b/tests/queryset.py index 29c62370..8d097ca6 100644 --- a/tests/queryset.py +++ b/tests/queryset.py @@ -190,7 +190,7 @@ class QuerySetTest(unittest.TestCase): """ class BlogPost(Document): hits = IntField() - tags = ListField(StringField()) + tags = ListField(StringField(), name='blogTags') BlogPost.drop_collection()