我的模板中有一个列表。对于列表中的每个项目,我有一个{{modelform}},其中包含一个复选框。我可以检查框,它会更新。问题是,当我选中一个项目的框并提交时,它会提交所有复选框,因为它们在每个实例中都是相同的。有没有办法为列表中的每个项目设置一个唯一的复选框实例?
当前每个模型形式复选框的呈现方式如下:
<input name="is_solution" type="checkbox" class="is_solution" id="is_solution">
我也尝试过使用
test = request.POST.get('checkbox')
和
test = request.POST.get('checkbox')
认为使用这个我可以在我的视图中发布更新。我想我这一切都错了,我迷失了。基本上,我想在列表上有一个复选框,就像在stackexchange上一样,你可以确认一个答案。有什么建议吗?
答案 0 :(得分:1)
你必须在视图中使用表单的前缀(只是每个表单对象的唯一内容):
def foo(request, ...):
objs = Model.objects.filter(...)
forms = []
for i, obj in enumerate(objs):
form = ModelForm(instance=obj, prefix=str(i))
forms.append(form)
...
这将确保每个表单都有唯一标识符,因此您可以提交特定表单。
您可以在模板中像往常一样呈现表单:
<form ...>
{% csrf_token %}
{% for form in forms %}
{{ form }}
{% endfor %}
</form>