如果我不明白您的问题,请在 cmets 中澄清。
Django Form Widgets Documentation 提供了几个预制小部件,您可以使用它们来指定如何呈现表单中的字段。
无需修改视图中的代码,我可以简单地将 widget 关键字 arg 添加到相应的表单字段中。
forms.py (v1)
class TestForm(forms.Form):
CHOICES = (
(1, "choice1"),
(2, "choice2"),
(3, "choice3"),
)
field = forms.ChoiceField(choices=CHOICES)
这呈现为下拉列表select:
<select id="id_field" name="field">
<option value="1">choice1</option>
<option value="2">choice2</option>
<option value="3">choice3</option>
</select>
现在将 widget 关键字 arg 添加到我的字段中:
forms.py (v2)
field = forms.ChoiceField(choices=CHOICES, widget=forms.CheckboxSelectMultiple)
这呈现为复选框列表:
<ul id="id_field">
<li>
<label for="id_field_0"><input id="id_field_0" name="field" type="checkbox" value="1" /> choice1</label>
</li>
<li>
<label for="id_field_1"><input id="id_field_1" name="field" type="checkbox" value="2" /> choice2</label>
</li>
<li>
<label for="id_field_2"><input id="id_field_2" name="field" type="checkbox" value="3" /> choice3</label>
</li>
</ul>
编辑
还可以添加 Django Admin 使用的小部件。有关这方面的更多信息,请参阅Django multi-select widget?。只需导入适当的小部件:
from django.contrib.admin.widgets import FilteredSelectMultiple
并改用它。请注意,在这种特殊情况下,您还需要包含表单的 media 才能获得所需的效果。