我用python flask开发了商品系统。
要与mongodb通信,请使用flask_mongoengine
这是我的模特。
class SubComment(EmbeddedDocument):
no = SequenceField()
body = StringField()
class Comment(EmbeddedDocument):
no = SequenceField()
body = StringField()
sub_comment = ListField(EmbeddedDocumentField(SubComment))
class Article(Document):
title = StringField()
body = StringField()
comments = ListField(EmbeddedDocumentField(Comment))
SubComment
模型存储在Comment
模型中,而Comment
模型存储在Article
模型中。
所以,这是我想要的输出。
{
"_id" : ObjectId("5c0641d81b48d9fe50dfdd7f"),
"title" : "test",
"body" : "gogo",
"comments" : [
{
"no" : 1,
"body" : "first comment",
"sub_comment" : [
{
"no": 1,
"body": "sub comm"
}
]
}
]
}
当我将Comment
模型插入Article
模型时,只需使用以下代码即可。
comment = Comment(
body='first comment'
)
article = Article.objects(body='gogo').first()
article.comments.append(comment)
article.save()
但是当我尝试将SubComment
插入Comment
时,它会引发错误-> AttributeError: 'BaseList' object has no attribute 'sub_comment'
下面是我使用的代码。
comment = SubComment(
body='sub comment'
)
article = Article.objects(title='test', comments__no=1).first()
article.comments.sub_comment.append(comment)
article.save()
经过搜索后,人们说无法插入嵌套字段。
这里有什么解决办法吗?我必须使用原始查询吗?
谢谢!
答案 0 :(得分:0)
[已解决]
我用for
这样的循环解决了。
count = 0
article = Article.objects(title='test', comments__no=1).first()
for comment in article.comments:
if comment.no == 1:
print(comment.no)
count = comment.no - 1
article.comments[count].sub_comment.append(sub_comment)
article.save()
但是我不知道这是正确的方法。
如果您有其他解决方案,请对其进行评论。