jquery - 在django表单中使用ajax时,出现错误 "Select a valid choice. That is not one of the available choices."

标签 jquery ajax django django-forms

我是 Django 新手。我使用简单的 ajax 根据类(class)选择动态更新选择字段学期。但是在提交表单时,我收到错误选择有效的选择。 所选选项不是可用选项之一。代码如下:

表单.py:

from django import forms
from feedback_form.models import course,section_info

class loginForm(forms.Form):
     iquery1 = course.objects.values_list('course_name', flat = True)
     iquery1_choices = [('', '----------')] + [(id, id) for id in iquery1]
     sem_choices = [('', '----------')]

     course_name = forms.ChoiceField(iquery1_choices,required=True, widget=forms.Select())
     semester = forms.ChoiceField(sem_choices, required= True, widget=forms.Select())

views.py:

def get_batch(request, c_id):
    current_course = feedback_form.models.course.objects.get(course_name=c_id)
    batches = feedback_form.models.batch.objects.all().filter(course_id=current_course)
    no_of_sem = feedback_form.models.course.objects.values_list('number_of_sem', flat=True).filter(course_id = current_course)
    no_of_sem = int(no_of_sem[0])
    batch_dict = {}
    for batch in batches:
         batch_dict[batch.batch_id] = batch.batch_id
    sem = {}
         sem[no_of_sem] = no_of_sem
    data = [batch_dict, no_of_sem]
    return HttpResponse(json.dumps(data))

登录表单.html:

 <form action="" method="post">
    <table>
        {{ form.as_table }}
    </table>
    {% csrf_token%}
    <input type="submit" value="Submit">
 </form>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>

$(document).ready(function(){
$('#id_course_name').change(function() {
    request_url = 'login/get_batch/' + c_id + '/';
    $.ajax({
        url: request_url,
        success: function(data){
            data = $.parseJSON(data);
            $('#id_semester').html('<option selected="' + "selected" + '">' + '' +'</option>');
            for(var i = 1; i<=data[1]; i++) //data[1] contains no of sem
                $('#id_semester').append('<option value="' + i + '">' + i +'</option>');
        }, 
        errors: function(e) {
            alert(e);
        }
    })

})

请帮帮我。

最佳答案

问题是 ChoiceField 要求所选选项位于其选择集中。

在上面的代码中,学期的选择是通过jquery动态更新的。但是,这些选择不是学期的选择集(即sem_choices)的一部分。这就是问题所在。

要解决此问题,请使用 request.POST 方法将所选值包含在 sem_choices 中。

在views.py中:

form = loginForm(request.POST)
sem = request.POST.get('semester')
form.fields['semester'].choices = [(sem, sem)]

关于jquery - 在django表单中使用ajax时,出现错误 "Select a valid choice. That is not one of the available choices.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28339713/

相关文章:

javascript - 使用包含选择器在多列中搜索

jquery - 在mvc中使用ajax发送表单

django 关键字不能是表达式

javascript - 将带有前导零的颜色十六进制数字转换为字符串

javascript - 如何删除javascript中的最后一行?

javascript - 在这个场景中事件是如何传递的?

jquery - DataTables Ajax 加载回调

javascript - Flask with AJAX - 更新 HTML 表

python - 如何在日期时间字段中按时间过滤?

php - 我如何才能对我的 PHP/MYSQL 新闻网站进行基准测试/配置文件,以便我以后可以将它与 django/postgres 重新编码的版本进行比较?