在Django模板中动态生成表单的Javascript验证

时间:2013-03-14 18:39:34

标签: javascript django django-forms

我正在努力解决可能非常基本的问题:我需要为我的大学数据库应用程序生成带有标记的表单。每个模块中的每个学生都有一个类“性能”,它存储模块的所有标记。有不同的评估,Performance类计算它们的平均值。

我需要输入,例如,第一次评估的所有标记,我用动态生成的Django Form作为模板中的表格来做:

{% for performance in performances %}
    <tr>
        <td>
            {{ performance.student }}
        </td>
        <td>
            {% if to_mark == 1 %} 
                <input type="text" class="input-mini" name="{{ student.student_id }}" value="{{ performance.assessment_1 }}">
            {% else %}
                {{ performance.assessment_1 }}
            {% endif %}
        </td>

       And the same for the other assessments (to_mark gets passed on by views.py to indicate which assessments needs to be marked here)

我没有使用Inlineformfields因此决定动态生成表单并使用Javascript验证它,也因为验证很简单(必须是1到100之间的数字),还因为我想使用Javascript来计算平均值。

我的问题是我对Javascript一无所知。所有教程(如此http://www.w3schools.com/js/js_form_validation.asp)都使用Javascript函数中的表单字段的名称,但在我的情况下,该名称是动态生成的,因此我可以在views.py:

if student.student_id in request.POST:
    tmp = request.POST[student.student_id]
    try:
        mark = int(tmp)
        if mark in range(0, 100):
        performance = Performance.objects.get(student=student, module=module)
        if to_change == 1:
            performance.assessment_1 = mark
       ...and so on for the other assessments
    except ValueError:
        pass (in case someone accidentally enters a letter and not a number)

有没有办法可以使用Javascript来处理我的表单字段?或者我应该使用不同的方法,而不是将student_id作为名称来阅读它?我怎么能这样做?

谢谢, 托比

1 个答案:

答案 0 :(得分:1)

使用JavaScript进入表单字段至少有3种方法:

通过ID,CSS类或DOM遍历。如果您不熟悉JavaScript,我建议您找一个django友好的客户端表单验证器,如:https://code.google.com/p/django-ajax-forms/