有没有办法为ModelMultipleChoiceField添加其他选项?具体来说,我想添加一个“全选”选项,而不是一个必须单独选择所有选项的最终用户。
当前模型表格:
class QueryForm(forms.Form):
book = forms.ModelMultipleChoiceField(queryset=Book.objects.all())
我想要这样的事情:
class QueryForm(forms.Form):
book = forms.ModelMultipleChoiceField(choices=(('Select All', 'Select All'),(Book.objects.all()))
如何将“全选”选项添加到“模型多项选择字段”?
答案 0 :(得分:3)
这是Django管理员还是您自己的形式?如果是管理员,最简单的解决方案是将字段添加到ModelAdmin.filter_horizontal
或ModelAdmin.filter_vertical
。 Django管理员将使用的特殊字段内置了“全选”选项。
如果这是你自己的表格,JS是你最好的选择,因为@AdamKG推荐。鉴于以下内容:
<div class="field">
<select multiple="multiple" name="my_field">
<option value="something">Something</option>
...
</select>
<a href="#" class="select-all">Select All</a>
</div>
这个jQuery应该可以解决这个问题:
$('.select-all').click(function(){
$('option', $(this).parent()).attr('selected', 'selected');
});
答案 1 :(得分:1)
您需要将ModelMultipleChoiceField
转换为可从MultipleChoiceField
中的相关模型中选择的__init__()
。使用哨兵(例如“全部”)添加“全选”选项,而不是从实际模型中获得的PK。然后在POST视图中检测它并正确设置。