Как сделать запрос по списку вложенных документов с помощью allow_inheritance
Если у меня есть следующая схема:
class Post(EmbeddedDocument):
title = StringField(max_length=120, required=True)
meta = {'allow_inheritance': True}
class TextPost(Post):
content = StringField()
class MoviePost(Post):
author = ReferenceField(Authors)
class Record(Document):
posts = ListField(EmbeddedDocumentField(Post))
И я делаю следующий запрос:
author = Author.objects.get_or_404(id = id)
records = Record.objects(posts__author = author)
records.count()
Я получаю следующую ошибку:
AttributeError: 'author' object has no attribute 'get'
Похоже, что это происходит только с allow_inheritance, когда определенные объекты могут иметь или не иметь поле 'author'. Если поле существует на всех объектах, таких как поле 'title', запрос работает нормально.
1 ответ
Кажется, что это все еще открытый вопрос в mongoengine, который еще предстоит решить. Один из способов обойти это использовать match
, Например, следующее делает свое дело:
records = Record.objects(posts__match = { 'author': author })