我想向用户显示预先选择的选项(因为他们更有可能删除一些项目而不是添加所有项目,这很麻烦)。
是否可以预先选择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"
答案 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()])
...
看起来像(自己试过):