我在clean_message
中创建了一个forms.py
方法,用于检查self.message
是否有内容,如果没有,则会引发ValidationError
。
"""
Comment
"""
class CommentForm(forms.Form):
"""
Comment field
"""
comment = forms.CharField(
widget = forms.Textarea(
attrs = {
'class': 'form-control',
'rows': 2
}
)
)
def clean_comment(self):
if self.cleaned_data['comment'] is None:
raise form.ValidationError({'comment': ['You must enter your comment'])
这是视图文件。我需要显示错误,如上所示构建错误?
<form action="comment" method="POST">
{% csrf_token %}
<div class="form-group">
{{ form.comment.errors }}
{{ form.comment }}
</div>
<div class="form-group">
<input type="submit" value="Say it" class="btn btn-success">
</div>
</form>
我尝试使用{{ form.errors }}
,对其进行迭代,使用{{ form.non_field_errors }}
等,但都没有效果。我猜不知道我正在重新加载表单,因此不会显示消息。
下面是我的write_comment
方法,点击按钮发布评论时执行的方法:
def write_comment(request, post_id):
"""
Write a new comment to a post
"""
form = CommentForm(request.POST or None)
if form.is_valid():
post = Post.objects.get(pk = post_id)
post.n_comments += 1
post.save()
comment = Comment()
comment.comment = request.POST['comment']
comment.created_at = timezone.now()
comment.modified_at = timezone.now()
comment.post_id = post_id
comment.user_id = 2
comment.save()
else:
form = CommentForm()
return redirect(reverse('blog:post', args = (post_id,)))
答案 0 :(得分:0)
如果您想要该字段,请使用required=True
。
comment = CharField(
required=True,
widget = forms.Textarea(
attrs = {
'class': 'form-control',
'rows': 2
}
)
)
这样,就不需要编写clean_comment
方法了。您当前的方法失败,因为self.cleaned_data['comment']
是空字符串''
,但只有None
才显示错误。
在模板中,{{ form.comment.errors }}
应该可以正常工作。