1

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

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

4

2 回答 2

4

这是在 Django 管理员中还是在您自己的表单中?如果是管理员,最简单的解决方案是简单地将字段添加到ModelAdmin.filter_horizontalor 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');
});
于 2012-05-09T16:47:58.623 回答
2

您需要将您ModelMultipleChoiceField的转换为MultipleChoiceField__init__(). 添加带有标记(例如“全部”)的“全选”选项,而不是您将从实际模型中获得的 PK。然后只需在 POST 视图中检测到这一点并进行适当的设置。

于 2012-05-09T16:28:07.923 回答