DJANGO:为ModelMultipleChoiceField添加“全选”选项?

时间:2012-05-09 15:27:55

标签: python django forms django-forms

有没有办法为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()))

如何将“全选”选项添加到“模型多项选择字段”?

2 个答案:

答案 0 :(得分:3)

这是Django管理员还是您自己的形式?如果是管理员,最简单的解决方案是将字段添加到ModelAdmin.filter_horizontalModelAdmin.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视图中检测它并正确设置。