【问题标题】:django is showing validation errors on its own error pagedjango 在自己的错误页面上显示验证错误
【发布时间】:2018-11-23 18:57:54
【问题描述】:

对于表单验证,我需要发送错误消息,因为我正在使用验证错误,但不是将错误发送到模板,而是在其错误页面上显示验证错误,您可以看到图像。

在我看来

    def form_valid(self, form):
    user = get_current_user(self.request)
    review = self.request.POST.get('review')
    user_profile = get_object_or_404(UserProfileModel, display_username=self.kwargs['display_username'])
    ratings = get_object_or_404(Rating,user_profile_model=user_profile)
    try:
        usr_rating = UserRating.objects.get(rating=ratings, user = user)
    except UserRating.DoesNotExist:
        usr_rating = None
    if usr_rating:
        usr_rating.review = review
        usr_rating.save()
    else:
        raise forms.ValidationError('Please rate first')
    return super(UserProfileView,self).form_valid(form)

在我的模板中

  {% if not form.is_valid %}
      {% for error in form.errors %}
          error
      {% endfor %}
    {% endif %}

我无法找出问题所在,或者我对使用表单验证感到困惑,请帮助我。

【问题讨论】:

  • 您真的不应该在form_valid 中进行此验证 - 这是因为表单已经有效。实际上,您根本不应该在视图中这样做,而应该在表单本身中这样做。

标签: django django-forms django-templates django-validation


【解决方案1】:

Django 不会将视图级别的错误作为表单错误处理。您需要使用add_error 方法添加表单错误,而不是引发错误。您可以为此覆盖 get_form 方法:

def get_form(self, form_class=None):
    form = super().get_form(form_class)
    if self.request.method == 'POST':
        user = get_current_user(self.request)
        review = self.request.POST.get('review')
        user_profile = get_object_or_404(UserProfileModel, display_username=self.kwargs['display_username'])
        ratings = get_object_or_404(Rating,user_profile_model=user_profile)
        try:
            usr_rating = UserRating.objects.get(rating=ratings, user = user)
        except UserRating.DoesNotExist:
            usr_rating = None
        if usr_rating:
            usr_rating.review = review
            usr_rating.save()
        else:
            form.add_error(None, 'Please rate first')
    return form

这将添加non_feild_errors:

{% if form.non_field_errors %}
    {{ form.non_field_errors }}
{% endif %}

【讨论】:

  • 谢谢先生,但它向我显示了这个错误 - 'ReviewForm' 对象没有属性 'cleaned_data'
  • @PankajSharma 尝试添加请求方法验证。查看更新。
  • 您没有触发表单的清理和验证,这是通过调用 form.is_valid() 方法完成的,这就是您没有清理数据的原因。
  • 哦,非常感谢它的工作,请检查您是否也可以帮助我stackoverflow.com/questions/50822957/…
猜你喜欢
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多