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



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

我在问题中使用两个小部件(widgets.RadioSelectwidgets.CheckboxSelectMultiple(来呈现问题的选择。当我提交表格时,我收到以下错误:

选择一个有效的选项。["选项1"、"选项2"]不是可用选项之一。

仅从第二个小部件的问题中出现,例如: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(中,它只接受字符串值而不接受列表。这就解释了为什么单选按钮之所以有效,是因为它们提交了一个字符串值,而复选框SelectMultiple之所以无效,是因为它提交了一份列表。

我已经修改了我生成的字段列表,以包括forms.Field子类。

当我有多个值时,我使用forms.MultipleChoiceField,如果只有一个值,我指定forms.ChoiceField

最新更新