Django forms.VaildationError没有显示在基于类的视图上

时间:2017-12-05 07:55:06

标签: python django

我的forms.validationerror未显示。以下是我正在使用的表格。 if语句有效,它会检测到问题,并成功打印出内容。 stackoverflow中的现有错误表明,内容不是None,如print语句中所示。

            class PollItemMessageAddForm(forms.ModelForm):
                class Meta:
                    model = Message
                    fields = [
                        "content"
                    ]

                    labels = {
                        'content': 'Add your comment',
                    }

                    widgets = {
                        'content': Textarea(attrs={'cols': 10, 'rows': 5}),
                    }


                def __init__(self, *args, **kwargs):

                    # this line should be before a super call
                    self.request = kwargs.pop('request', None)

                    super(PollItemMessageAddForm, self).__init__(*args, **kwargs)
                    self.helper = FormHelper()
                    self.helper.form_method = 'post'
                    self.helper.add_input(Submit('submit', value='Post', css_class='buttonspace btn-success'))


                def clean_content(self):
                    content = self.cleaned_data.get("content")

                    if len(content) > 50:
                        print content
                        raise forms.ValidationError("Please limit your message to less the 50 characters")

                    return content

下面是我在基于类的视图中的views.py post语句,它跳过form.isvalid以重定向到应出现错误消息的同一url。我在基于类的视图中使用了detailview和formmixin,如果有帮助的话。在没有追溯的情况下,我无法看到问题的来源。任何帮助将不胜感激。

                def post(self, request, *args, **kwargs):
                    url = "/polls/" + str(self.get_object().id)

                    form = self.get_form()
                    if request.method == "POST":

                        if form.is_valid():

                            print "works"

                            return self.form_valid(form)

                    return HttpResponseRedirect(url)

1 个答案:

答案 0 :(得分:2)

如果表单无效,您必须像这样返回:

return render(request, self.template_name, {'errors': form.errors, 'form':form})

并在模板中显示错误,或模板内的{{ form.non_field_errors }}将显示错误。