使用django.forms.ModelMultipleChoiceField时,预先选中所有复选框

时间:2017-08-03 11:51:54

标签: django

我想向用户显示预先选择的选项(因为他们更有可能删除一些项目而不是添加所有项目,这很麻烦)。

是否可以预先选择ModelMultipleChoiceField呈现的所有复选框?

这可以在模型或表单中完成吗?

我不想使用javascript来执行此操作。

我找不到任何有关为ModelMultipleChoiceField预先选择的文档,官方文档很少:https://docs.djangoproject.com/en/1.11/ref/forms/fields/#modelmultiplechoicefield

def __init__(self, *args, **kwargs):
    super(MyForm, self).__init__(*args, **kwargs)
    self.fields['my_items'] = forms.ModelMultipleChoiceField(
        widget=forms.CheckboxSelectMultiple,
        queryset=models.MyItem.objects.all(),
        initial=self.instance.MyItem.all())

如果我在模板中添加“已选中”,则会收到错误消息:

{% render_field form.my_items class+="form-control" checked %}

错误:

'render_field' tag requires a form field followed by a list of attributes and values in the form attr="value"

1 个答案:

答案 0 :(得分:1)

正如here指出的那样,您只需将initial设置为所有值:

# Let's assume this is your choice set
CHOICES = (
    ('a', 'A'),
    ('b', 'B'),
    ('c', 'C')
)

field = forms.MultipleChoiceField(
    ...
    initial=[c[0] for c in CHOICES]
    ...
)

查询集

假设您要显示用户。只需使用:

...
queryset=User.objects.all(),
initial=[u for u in User.objects.all()])
...

看起来像(自己试过):

enter image description here