这是一个简单的场景:我有一篇附有评论的博客文章。现在我想使用 mongoforms 让用户提交他们的评论。因此我有这个models.py:
class Post(Document):
title = StringField(max_length=60)
body = StringField()
created = DateTimeField(default=datetime.datetime.now)
comments = ListField(EmbeddedDocumentField('Comment'))
class Comment(EmbeddedDocument):
author = StringField(max_length=60)
body = StringField()
created = DateTimeField(default=datetime.datetime.now)
我正在使用django-mongoforms来支持类似的 ModelForm 功能,在forms.py 中:
class CommentForm(MongoForm):
class Meta:
document = Comment
fields = ('author', 'body')
在views.py中,我只想保存用户输入的内容,更具体地说是评论的作者和正文字段,这是添加评论的方法:
def add_comment(request, id):
post = Post.objects.with_id(id)
if request.method == 'POST':
form = CommentForm(request.POST, instance=post.comments)
if form.is_valid():
form.save()
return HttpResponseRedirect(post.get_absolute_url())
然后,一旦我单击提交按钮,就会出现错误消息:
实例必须是 mongoengine 文档,而不是 BaseList
所以问题是:
- 如何将 BaseList 转换为 MongoEngine 中的文档?我在没有任何提示的情况下浏览了文档。
- 这里通常处理 EmbeddedDocument 的最佳做法是什么?ReferenceDocument 会有帮助吗?
这里还有一个相关的问题,但没有答案: 在 mongoengine 中更新嵌入文档的列表字段的正确方法是什么?