Ошибка проверки вложенных вложенных документов в MongoEngine - PullRequest
1 голос
/ 22 февраля 2020

Я создаю вложенные встроенные документы с двумя уровнями (встроенный документ внутри встроенного документа)

Вот код:

from mongoengine import *

class CommentDetails(EmbeddedDocument):
    name = StringField()
    category = StringField()

class Comment(EmbeddedDocument):
    content = StringField()
    comments = ListField(EmbeddedDocumentField(CommentDetails))

class Page(Document):
    comments = ListField(EmbeddedDocumentField(Comment))

comment1 = Comment(content='Good work!',comments=CommentDetails(name='John',category='fashion'))
comment2 = Comment(content='Nice article!',comments=CommentDetails(name='Mike',category='tech'))

page = Page(comments=[comment1, comment2])
page.save()

При запуске выдается следующая ошибка:

ValidationError: ValidationError (Page: None) (comments. В поле списка могут использоваться только списки и кортежи> 1.comments. В поле списка могут использоваться только списки и кортежи: ['comments'])

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

1 Ответ

1 голос
/ 25 февраля 2020

Проблема возникает из этих двух строк:

comment1 = Comment(content='Good work!',comments=CommentDetails(name='John',category='fashion'))
comment2 = Comment(content='Nice article!',comments=CommentDetails(name='Mike',category='tech'))

comments должен быть списком, но вы предоставляете объект.

Используйте это:

comment1 = Comment(content='Good work!',comments=[CommentDetails(name='John',category='fashion')])
comment2 = Comment(content='Nice article!',comments=[CommentDetails(name='Mike',category='tech')])
...