如何在Django中显示警报错误

时间:2016-03-20 23:50:26

标签: django forms validationerror

我在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,)))

1 个答案:

答案 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 }}应该可以正常工作。