簡単なシナリオを次に示します。コメントが添付されたブログ投稿があります。ここで、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)
そして、 forms.py内で同様のModelForm機能をサポートするためにdjango-mongoformsを使用しています:
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())
次に、[送信]ボタンをクリックすると、エラーメッセージが表示されます。
インスタンスは、BaseListではなくmongoengineドキュメントである必要があります
したがって、質問は次のとおりです。
- BaseListをMongoEngineでドキュメントに変換する方法は?私はヒントなしでドキュメントを調べました。
- EmbeddedDocumentを処理するための一般的なベストプラクティスは何ですか?ReferenceDocumentは役に立ちますか?
また、ここには関連する質問がありますが、答え はありません。mongoengineで埋め込まれたドキュメントのリストフィールドを更新する適切な方法は何ですか?