Как сделать запрос по списку вложенных документов с помощью 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 })
Другие вопросы по тегам