Fixed delete(), resolved item_frequencies field

This commit is contained in:
Harry Marr 2009-12-28 01:39:29 +00:00
parent 53544c5b0f
commit 90e5e5dfa9
3 changed files with 25 additions and 16 deletions

View File

@ -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):

View File

@ -52,6 +52,27 @@ class QuerySet(object):
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):
"""Transform a query from Django-style format to Mongo format.
@ -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 = {};

View File

@ -190,7 +190,7 @@ class QuerySetTest(unittest.TestCase):
"""
class BlogPost(Document):
hits = IntField()
tags = ListField(StringField())
tags = ListField(StringField(), name='blogTags')
BlogPost.drop_collection()