Django选择一个有效的选择[...]不是可用的选择之一以动态生成的形式

问题描述

我正在制作测验应用程序,我想制作一个动态表格来呈现问题。

我在问题中使用了两个小部件(widgets.RadioSelectwidgets.CheckBoxSelectMultiple)来呈现问题的选择。当我提交表单时,出现以下错误

选择一个有效的选择。['option1','option2']不是可用的选择之一。

仅由第二个窗口小部件的问题引起,例如:widgets.CheckBoxSelectMultiple。 RadioSelect成功提交。

forms.py:

    class QuestionForm(forms.Form):
            
        def __init__(self,fields,*args,**kwargs):
    
            super(QuestionForm,self).__init__(*args,**kwargs)
    
            # Init form fields
            for field in fields:
                self.fields[field['name']] = forms.ChoiceField(
                    label=field['label'],choices=field['choices'],widget=getattr(widgets,field['widget']),required=False
                )

views.py:

def quiz(request,quiz_id):

    quiz = get_object_or_404(QCM,pk=quiz_id)

    if request.method == 'POST':
        if request.POST['action'] == 'Save':
            form = QuestionForm(data=request.POST)
            if form.is_valid():
                print('form is valid :)')
                form.save()
            else:
                print('form is not valid :(')
    else:
        form = QuestionForm()

    context = {
        'form': form,}
    return render(request,'quiz/quiz.html',context)

quiz.html

{% extends "quiz/first.html" %}
{% load staticfiles %}

{% block main %}
    <form method="POST" class="form-horizontal" id="qcm_form" enctype="multipart/form-data">
        <div class="row">
            <div class="col-md-12">
                {% csrf_token %}
                
                {% for field in form %}
                    <div class="form-group">
                        <label class="field-label" for="id_{{ field.name }}">{{ field.label }}{% if field.field.required %} <span class="text-danger">*</span>{% endif %}</label>
                        {{ field }}
                    </div>
                {% endfor %}
            </div>
        </div>
        <input type="submit" class="btn btn-primary" name="action" value="Save">
    </form>
{% endblock main %}

任何帮助将不胜感激。

解决方法

问题出在我使用的forms.Field子类(ChoiceField)中,女巫只接受字符串值,而不接受列表。这就解释了为什么单选按钮可以工作,因为它们提交了一个字符串值,而CheckboxSelectMultiple却没有,因为它提交了一个列表。

我已经修改了生成的字段列表,使其也包含forms.Field子类。

当我有多个值时,我会使用forms.MultipleChoiceField;如果只是一个值,我会分配forms.ChoiceField

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...