Django形式有多个复选框

时间:2017-11-23 20:50:48

标签: django python-3.x

我是Django的新手!我有一个页面,显示旁边有复选框的项目。项目/复选框的数量各不相同。按下按钮时,我希望修改相应的选中项。

到目前为止,我试图用一种形式包装它:

<form method="post">
{% csrf_token %}
{% for event in items %}
    {{ event.eventID }}
    <input type="checkbox" value="{{ event.eventID }}" name="choices">
{% endfor %}
<button type="submit">Approve</button>
</form>

我想在Django表单字段中收集它们。我正在尝试使用ModelMultipleChoiceField:

class ApproveEventForm(forms.Form):
    choices = forms.ModelMultipleChoiceField(queryset = Event.objects.all(), widget=forms.CheckboxSelectMultiple())

在我看来,我想编辑所选项目:

def approve_event(request):
if request.method == "POST":
    form = ApproveEventForm(request.POST)
    print(form.errors)
    if form.is_valid():
        for item in form.cleaned_data['choices']:
            item.approved = True
            item.save()
else:
    form = ApproveEventForm()
    unapproved = Event.objects.filter(approved=False)
    return render(request, 'app/approve_event.html', {'items': unapproved, 'form': form})

我的表单无效且form.errors打印:选择&#34;&#34;不是主键的有效值 我怎样才能解决这个问题?或者是否有其他方式来访问所选项目?

编辑:将表单传递给模板。

1 个答案:

答案 0 :(得分:0)

使用MultipleChoiceField而不是ModelMultipleChoiceField进行管理以修复它。然后使用现有事件ID填充选项并将其传递给模板。

表格:

choices = forms.MultipleChoiceField(widget = forms.CheckboxSelectMultiple())

观点:

form.fields['choices'].choices = [(x.eventID, "Event ID: " + x.eventID) for x in unapproved]

还必须改变一些查找和编辑事件对象的逻辑。