初始化django CheckboxSelectMultiple并取消选中所有内容?

时间:2018-04-24 13:01:12

标签: django django-forms django-templates django-views

我有一个模型表单,将ModelMultipleChoiceField呈现为CheckboxSelectMultiple

class VisitForm(ModelForm):

    def __init__(self, queryset=None, *args, **kwargs):
        super(VisitForm, self).__init__(*args, **kwargs)
        if queryset:
            self.fields['students'] = forms.ModelMultipleChoiceField(
                queryset=queryset,
                widget=forms.CheckboxSelectMultiple()
            )

现在在模板中简单地呈现它:

<div class="form-group">
    {{field.label}}
    {{field}}
</div>

初始化可以选择我期望的选项 - 但默认情况下两个选项都是checked

我正在尝试弄清楚如何初始化这些框,使它们默认为unchecked

实现这一目标的最佳方法是什么?

它在view中初始化为:

visitor = Visitor.objects.get(unique_id=unique_id)
students = Student.objects.filter(parents__unique_id=unique_id)
form = VisitForm(initial={'visitor':visitor, 'students':students}, queryset=students)

1 个答案:

答案 0 :(得分:1)

您正在传递students查询集作为初始数据,因此Django会选择查询集中的每个学生。

您可以使用空的查询集Student.objects.none(),但从students词典中删除initial会更加容易:

form = VisitForm(initial={'visitor':visitor}, queryset=students)