我希望用户选择属于某个型号的多个元素。我不想使用默认的&c; ctrl + click'输入django表单,但我自己创建一个复选框表。
出于这个原因,我通过定义小部件来隐藏ModelMultipleChoiceField:
field = forms.ModelMultipleChoiceField(..., widget=forms.MultipleHiddenInput())
然后我将表单元素添加到模板中,如下所示:
<form method="POST" class="locklist-form" id="locklist-form">{% csrf_token %}
{{ form.field }}
</form>
在这一步,我希望将select-option元素添加到HTML页面(隐藏),以便我可以访问元素选项并使用javascript修改它们。但是,它不会向HTML页面添加任何内容。
我将这种方法用于其他类型的表格。对于TextField
HTML页面,有一个隐藏元素,如下所示:
为什么它不能与ModelMultipleChoiceField
一起使用?如何使用Javascript修改此字段的选项?
编辑: MultipleHiddenInput renders only if with initial data是一个类似的问题。但应用它并不会导致预期的解决方案。在这个问题中,预计会将以下内容呈现为隐藏: 但是在MultipleHiddenInput renders only if with initial data之后,当我将表单构造函数修改为:
时form = MyForm(initial={'field':MyModel.objects.all()})
它可能有用,但不完全是预期的。我需要在一个对象列表中标记一些选项。
答案 0 :(得分:0)
我使用Javascript完成它,而不是依赖Django的功能。我将带有ModelMultipleChoiceField的表单直接添加到模板(未隐藏)。然后我在加载页面时运行Javascript脚本:
var field = document.getElementById('id_field');
selecter.setAttribute('class', 'hidden');
隐藏类的CSS定义如下:
.hidden{
display: none;
}
这让我想到了理想的情况。 ModelMultipleChoiceField隐藏如下:
此时,我可以通过Javascript修改某些项目:
document.getElementById('id_field').options[index].selected = boolValue;