当前位置: 首页 > 面试题库 >

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

祝花蜂
2023-03-14
问题内容

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

forms.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))

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

})

请帮帮我。


问题答案:

问题是,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的新手,如果您能向我提供一些指导,我将不胜感激。我正在尝试创建一种允许用户在一个或多个选项上打勾的表格。我知道我必须将MultiChoiceField字段与CheckboxSelectMultiple小部件一起使用,但是Django文档没有提供有关此主题的示例。如果您能给我一个例子并解释如何处理结果,将不胜感激。例如,如果我有一个带有选项abcd的表单,并且用户在c和d

  • 我使用此代码在表单中设置select。 我检查时的html部分似乎具有适当的值,并将文本放在那里。 但是在屏幕上,选择框是空的,不显示文本。 我也试图将文本放在跨度选项中,但它也不起作用

  • 问题内容: 使用Selenium Web测试时,有几种方法可以识别WebElement。 根据我的经验,我使用了以下选择器: 类名 - CSS选择器 - ID - 连结文字 - 名称 - 标签名称 - XPath的 - 显然,当只有一个选项可用于定位元素时,我们必须使用该选项,但是当可以使用多种方法(例如:下面的div)时,应如何确定使用哪种方法呢?是否有比其他选择器 更有效的 选择器?有一些 更

  • 您的源码发布 需要 一个许可证。在美国,如果没有指定许可证,用户就没有合法的权利下载、修改或分发。此外,除非你告诉他们要遵循什么规则,否则人们不能对你的代码做出贡献。选择一个许可证是很复杂的,所以这里有一些建议: 开源许可。 这里有许多可以选择 开源许可   。 通常, 这些许可分为两类: 一类是让使用者能自由地使用软件 (像这种更加开发的开源许可有 MIT , BSD & Apache) 。 另

  • 问题内容: 如何将此SQL查询转换为Django ORM语句? 请帮助!:) ps ,不受或限制 问题答案: 使用两个QuerySet,如docs所示。

  • 问题内容: 我目前正在使用WTFORMS创建一个动态选择字段,但是它从未提交,并且通过以下错误使验证失败。 我的字段是这样创建的: 在视图中,我从数据库中获取选项,如下所示: 但是,如果我创建静态选项,它将起作用。 问题答案: 我的猜测是,是-当数据从它被视为一个客户端回来的字符串由WTForms除非调用传递给了的关键字参数wtforms.fields.SelectField的构造函数: 或者,如