首页 > 解决方案 > 如何使用 Ajax 渲染 django-crispy-forms 的验证错误?

问题描述

我想用 ajax 显示 Django 默认表单错误。如果有一些错误,这里的代码应该显示 django-crispy-forms 的验证错误。但我不能那样做。应该添加什么后记?

视图.py;</p>

    if form.is_valid();  
        ~~~~~~
        if self.request.is_ajax():
            return JsonResponse({
                'is_valid': True,
                'redirect':reverse(/.../),
            })
        return redirect(hogehoge)
    else:
        if self.request.is_ajax():
            return JsonResponse({
                'is_valid': False,
                'error':form.errors,
            })

Javascript;

<script>
$(function() {
  $(document).on('click', '.submit_button', function (e) {
    var $form = $('.form'); 
    var form = $form[0];
    e.preventDefault();
    $.ajax({
        processData: false,
        contentType: false,
        dataType: 'json',
        url: $form.attr('action'),
        type: $form.attr('method'),
        data: new FormData(form),
        }).done(function(data,textStatus) {
          if (data.is_valid) {
            window.location.href = data.redirect;
            }
            else {
             *Display Django default validation errors if there are error forms.*
            }
      });
    });
  });
</script>

*表单HTML;

<form class="form" action="" method="post" enctype="multipart/form-data">
<div class="input">
  {% if field.errors %}
  {% render_field field class+="form-handles is-invalid" %}
  {% for error in field.errors %}
  <div class="invalid-render">
    {{ error|escape }}
  </div>
  {% endfor %}
  {% else %}
  {% render_field field class+="form-handles" %}
  {% endif %}
</div>
  <div class="text-center">
    <button type="submit" class="submit_button">submit</button>
  </div>

</form>

标签: pythonjqueryjsondjangoajax

解决方案


您可以从官方文档中找到有关如何在 AJAX 响应中仅呈现表单的信息。它将在那里包含表单、输入值和表单错误。


推荐阅读