在将ajax与Django形式一起使用时,出现错误“选择一个有效的选择。那不是可用的选择之一。”

浏览:28日期:2024-02-15
如何解决在将ajax与Django形式一起使用时,出现错误“选择一个有效的选择。那不是可用的选择之一。”?

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

在上面的代码中,的选择semester是通过jquery动态更新的。但是,这些选择不是semester选择集(即)的一部分sem_choices。因此出现了问题。

若要解决此问题,请sem_choices使用request.POST方法将选择的值包括在内。

在views.py中:

form = loginForm(request.POST)sem = request.POST.get(’semester’)form.fields[’semester’].choices = [(sem, sem)]解决方法

我是django的新手。我正在使用简单的ajax 根据 课程* 选择动态更新选择领域 学期 。但是在提交表格时,我收到错误消息,请选择一个有效的选择。 所选选项 不是可用选项之一。 代码如下: __*

forms.py:

from django import formsfrom feedback_form.models import course,section_infoclass 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))

loginForm.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);} })})

请帮帮我。

相关文章: