2014-02-20 3 views
3

Я столкнулся с классической ловушкой, но не могу найти хороший пример с mongoengine того, что я должен делать.mongoengine запросить список встроенных документов

Используя стандартный пример блога у меня есть что-то вроде:

class Comment(EmbeddedDocument): 
    author = StringField() 
    approved = BooleanField(default=False) 

class Post(Document): 
    id = StringField(required=True, unique=True) 
    comments = ListField(EmbeddedDocumentField(Comment)) 

Для данного сообщения в блоге (с идентификатором some_id) Я просто хочу, чтобы загрузить список утвержденных комментариев. Я случайно загружаю все комментарии, если одобрены какие-либо комментарии к сообщению, потому что я сопоставляю элемент списка.

ответ

5

Поскольку комментарии содержатся в документе, тогда комментарии всегда будут содержать все комментарии.

Добавить свойство Сообщение, что фильтры и только возвращает список Одобренные комментарии, например:

@property 
def approved_comments(self): 
    return [comment for comment in self.comments if comment.approved] 
+0

хорошо, что объясняло бы, почему я не мог понять, как это сделать ... – TristanMatthews

7

Попробуйте это в моделях:

class Comment(EmbeddedDocument): 
    author = StringField() 
    approved = BooleanField(default=False) 

class Post(Document): 
    id = StringField(required=True, unique=True) 
    comments = EmbeddedDocumentListField(Comment) 

ВНИМАНИЕ: EmbeddedDocumentListField вместо ListField

Тогда ваш запрос таким образом

comments_approved = Post.objects.get(pk=post_id).comments.filter(approve=True) 

Я надеюсь вам помочь!

+0

Удивительно, это должно быть выбрано в качестве ответа) –

Смежные вопросы