所以,我正在使用django.contrib.comments。我安装好了,但不是笨重的默认评论表单,我想使用一个自定义表单模板,只显示一个textarea并提交按钮。
这背后的基本原理是,如果用户区域已经过身份验证,用户只会看到该表单,并且我希望保持表单简单并自动获取用户名等。
我已经实现了自定义表单,但在尝试提交时遇到错误。
以下是我的模板中包含注释表单的内容(条目是从视图传递的对象):
{% load comments %}
{% render_comment_form for entry %}
这是我在/templates/comments/form.html中的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.
有人可以帮忙吗?
答案 0 :(得分:1)
注释模型使用通用外键映射到进行评论的对象,例如博客条目。这些是标准评论表中包含的必填隐藏字段。
来自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)
...
如果您尚未更改表单类并且只想更改html模板,则可以通过在所有隐藏字段上添加for循环来包含这些字段。
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
答案 1 :(得分:1)
通过从Theju's app复制来解决问题 - 特别是,请参阅Joshua Works对第2部分的评论。