質問
だから、私はdjango.contrib.commentsを使用しています。私はそれがOKではなく、扱いにくい、デフォルトのコメントフォームより、私はちょうどテキストエリアを示してカスタムフォームテンプレートを使用し、ボタンを提出したいと思いインストールしました。
この理論的根拠は、すでに認証され、彼らが地域ならば、ユーザーはフォームだけを見て、私は、フォームをシンプルにし、自動的にそのユーザー名などをピックアップしたいと思います。
ということです私は、カスタムフォームを実装しましたが、私はそれを提出しようとすると、エラーを取得しています。
ここで私は(エントリがビューから渡されたオブジェクトである)コメントフォームのページのための私のテンプレートを持っているものです。
{% load comments %}
{% render_comment_form for entry %}
そして、ここに私のHTMLは/templates/comments/form.htmlでいます:
{% if user.is_authenticated %}
<p>Submit a comment:</p>
<form action="/comments/post/" method="post">
<textarea name="comment" id="id_comment" rows="2" style="width: 90%;"></textarea>
<input type="hidden" name="options" value="{{ options }}" />
<input type="hidden" name="target" value="{{ target }}" />
<input type="hidden" name="gonzo" value="{{ hash }}" />
<input type="hidden" name="next" value="{{ entry.get_absolute_url }}" />
<span style="float:right;"><input type="submit" name="post" value="Add"></span>
</form>
{% else %}
<p>Please <a href="/login/">log in</a> to post a comment.</p>
{% endif %}
これは、最初は大丈夫レンダリング、私はコメントフォームを送信しようとすると、私は、次のDjangoのエラーを取得します:
Comment post not allowed (400)
Why: Missing content_type or object_pk field.
誰が助けることはできますか?
解決 2
Thejuのアプリからコピーすることで、問題を修正しましたに - 特に、パート2にジョシュアワークスコメントを参照してください。
。他のヒント
コメントモデルはコメントはブログのエントリのような作られたのオブジェクトにマッピングするための一般的な外部キーを使用しています。これらは、標準のコメントフォームに含まれて隠しフィールドを必要とされます。
django.contrib.comments.modelsから
...
class CommentSecurityForm(forms.Form):
"""
Handles the security aspects (anti-spoofing) for comment forms.
"""
content_type = forms.CharField(widget=forms.HiddenInput)
object_pk = forms.CharField(widget=forms.HiddenInput)
...
フォームクラスを変更するだけにして、すべての隠しフィールド上のforループを追加することにより、これらのフィールドを含むことができ、HTMLテンプレートを変更したい。していない場合は、
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}