表单验证未显示在表单上

时间:2019-12-06 23:20:44

标签: django django-views

我有一个自定义表单验证,该验证可在弹出窗口表单上运行。如果表单验证发生,我会收到一个错误的请求错误,这是我在views.py中编写的。我如何呈现它,以便用户停留在表单上并显示验证消息。谢谢您的帮助。这是我的代码。

@login_required
def K8_Points_Classroom(request):
    #context_from_k8_points = request.session['k8_points_context'] 
    if request.method == 'POST':
        form = K8Points_ClassroomForm(request.POST)
        if form.is_valid():
             form.save(commit=False)
             form.save()
             class_name = form.cleaned_data.get('class_name')
             getstudents = Student.objects.filter(class_name = class_name)
             students = getstudents.all()
             form = K8Points_ClassroomForm()
             context = {'form': form ,'students' : students, 'class_name': class_name,}
             return render(request,'points/k8_points_classroom.html', context)  

        else:
            return HttpResponseBadRequest("Bad Request")      

    else:
      return render(request, 'points/k8_points_classroom.html', {'form': form} )   


更新了form.html

{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% crispy K8Points_ClassroomForm %}
{% load static %}
{% block content %}


<br>
<h2>{% load static %}
    <img src="{% static 'forms/star.png' %}" alt="chain" height="62" width="62">  {{class_name}}</h2>
<br>
<br>


<form action="/points/k8_points_classroom" method="POST">
    {% csrf_token %}
    <!-- Start Date -->
    <div class="container">
        <div class="container">
            <div class='row'>
                <div class="col-4">
                    <p> Recording Data as User : {{user.username}} </p>
                    </div>
                        </div>
                 <div class='row'>
                    <div class = "col-2">
                        {{form.date|as_crispy_field }}
                           </div>
                           <div class = "col-2">
                        {{form.week_of|as_crispy_field }}
                           </div>
                             <div class = "col-2">
                        {{form.day|as_crispy_field }}
                           </div>
                              </div>

            </div>
       </form>

            <div class="jumbotron" align="middle">
                  <img src="{% static 'forms/levelup.png' %}" alt="levelup" height="120" width= "120">
                <h1>My Students</h1>

                <!-- Line Break -->
                <hr style="border: 1px solid black;"/>
                <!-- Line Break -->

                <div class="row mb-3">
                {% for i in students%}
                        <div class="col-md-4 themed-grid-col"><h2>{{i.student_name}}</h2> 
                            <p align="left"> Today's Score: {{total}}</p>

                            <h4>
                                <button type="button" class="btn btn-primary btn-lg btn-block" data-toggle="modal"
                                        data-target="#PointsBox{{ student.pk }}">Level Up
                                </button>

                            </h4>
                            <div id="PointsBox{{ student.pk }}" class="modal fade" role="dialog">
                                <div class="modal-dialog">
                                    <div class="modal-content">
                                        <div class="modal-header">
                                            <img src="{% static 'forms/star.png' %}" align="left" alt="chain" height="42"
                                                 width="42">
                                            <h4 class="modal-title">Points Confirmation </h4>
                                            <button type="button" class="close" data-dismiss="modal"> &times;</button>
                                        </div>
                                        <div class="modal-body">
                                            <h6>
                                                <div class="modal-body">Please add the selected points for the current
                                                    student.</div>
                                            </h6>



                                            <form action="/points/k8_points_classroom" method="POST">
                                                    {% csrf_token %} 
                                            <div class="form-row" align='left'>
                                                <div class="col-7">
                                                    {{form.class_name|as_crispy_field }}
                                                    <input type="student_name" class="form-control" value ="{{i}}" >
                                                    {{form.time_frame|as_crispy_field }}
                                                </div>
                                            </div>
                                            <div class="form-row">
                                                <div class="col-3" align='left'>
                                                    {{form.behavior|as_crispy_field }}
                                                    {{form.academic|as_crispy_field }}

                                                    <button type="submit" class="btn btn-success" ><i
                                                            class="fas fa-star"></i> Level Up
                                                    </button>
                                                </div>
                                            </div>
                                        </div>
                                        <div class="modal-foot"></div>
                                    </div>
                                </div>
                            </div>
     </div>
         </form>
                  {% endfor %}                           
                {% endblock %}

1 个答案:

答案 0 :(得分:0)

如果表单无效,您将不会返回错误的回复。取而代之的是,以无效的形式再次呈现页面,并且在temolate中,您将能够呈现错误。尝试仅使用{{ form.as_p }}开始呈现表单,您将看到错误。格式错误位于form.errors中,每个字段都有自己的错误,您可以访问它们form.field.erorrs

if request.method == 'POST':
    form = K8Points_ClassroomForm(request.POST)
    if form.is_valid():
         form.save(commit=False)
         form.save()
         class_name = form.cleaned_data.get('class_name')
         getstudents = Student.objects.filter(class_name = class_name)
         students = getstudents.all()
         form = K8Points_ClassroomForm()
         context = {'form': form ,'students' : students, 'class_name': class_name,}
         return render(request,'points/k8_points_classroom.html', context)

return render(request, 'points/k8_points_classroom.html', {'form': form} )