【发布时间】:2012-01-31 08:49:50
【问题描述】:
这是一个简单的场景:我有一篇附有 cmets 的博客文章。现在我想使用 mongoforms 让用户提交他们的 cmets。因此我有这个 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
所以问题是:
- 如何在 MongoEngine 中将 BaseList 转换为 Document?我在没有任何提示的情况下浏览了文档。
- 这里处理 EmbeddedDocument 的最佳实践是什么? ReferenceDocument 会有帮助吗?
这里还有一个相关的问题,但没有答案: What is the proper way to update a listfield of embedded documents in mongoengine?
【问题讨论】:
标签: python django mongodb mongoengine