我试图在我的模板中填充一个<select>
元素,其中包含来自表单字段的数据,如下所示:
forms.py
class CreatePlayerForm(forms.Form):
size = forms.CharField()
views.py
class CreatePlayer(FormView):
...
def get(self, request, *args, **kwargs):
...
boots = Boots.objects.filter(...).values_list('size', flat=True) # return a list
form.initial['boots'] = boots
模板
<select id="leftValues4" size="5" multiple>
{% for boot in form.boots %}
<option>{{ boot }}</option>
{% endfor %}
</select>
使用上面的代码我得不到任何结果。
有什么建议吗?
答案 0 :(得分:1)
你根本没有以正确的方式接近这一点。
initial
专门用于预先设置选择的值。您正在尝试填充值的列表。为此,您需要使用支持此类列表的实际字段;那是一个ChoiceField,而不是CharField。
其次,选择需要具有ID值和显示值;所以你需要一个2元组的列表/元组。
表格:
class CreatePlayerForm(forms.Form):
size = forms.ChoiceField(choices=[])
def __init__(self, *args, **kwargs):
sizes = kwargs.pop('sizes')
super(CreatePlayerForm, self).__init__(*args, **kwargs)
self.fields['sizes'].choices = sizes
视图:
class CreatePlayer(FormView):
...
def get_form_kwargs(self, *args, **kwargs):
form_kwargs = super(CreatePlayer, self).get_form_kwargs(*args, **kwargs)
boots = Boots.objects.filter(...).values_list('id', 'size')
form_kwargs['sizes'] = boots
return form_kwargs
模板:
{{ form.boots }}