我是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;不是主键的有效值 我怎样才能解决这个问题?或者是否有其他方式来访问所选项目?
编辑:将表单传递给模板。
答案 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]
还必须改变一些查找和编辑事件对象的逻辑。