从列表到Django选择菜单
我以为我搞明白了,但现在我觉得缺少了什么。
首先,我有一个查询集,叫做records。
records = Record.objects.all()
现在我想把这个查询集变成一个列表,列表里只包含表格中的一列,叫做columnA。
alist = records.values_list('columnA')
然后我想把这个列表作为参数传递给一个自定义的表单。
FilterForm(alist)
这是我的表单:
class FilterForm(forms.Form,list):
numbers = forms.ChoiceField(list)
但是我总是收到一个错误,提示'type'对象不可迭代。我不确定问题是不是出在传递列表上,因为当我在命令行运行这段代码时,仅仅导入FilterForm就出现了错误信息。
编辑:我修改了我的FilterForm,现在它看起来是这样的。
class FilterForm(forms.Form):
def __init__(self,numbers):
number = forms.ChoiceField(numbers)
所以现在我觉得我想做的事情更明显了,就是把一个列表传递给FilterForm。然而,当我渲染我的模板并传递表单时,没有任何表单字段显示出来。不过没有错误信息。
编辑编辑:我还尝试了这个,网上看到的。
class FilterForm(forms.Form):
number = forms.ChoiceField()
def __init__(self,numbers):
super(FilterForm,self).__init__()
self.fields['number'].choices=numbers
但是出现了错误:
Exception Type: TemplateSyntaxError
Exception Value:
Caught ValueError while rendering: need more than 1 value to unpack
2 个回答
0
这里有个错误:
class FilterForm(forms.Form,list):
numbers = forms.ChoiceField(list)
你把 FilterForm
设成了 forms.Form
和 list
的子类;然后你希望 list
能作为 ChoiceField
的参数使用。
我觉得你是在寻找动态的 ChoiceFields
。
想了解更多,可以看看:
1
问题出在这一行中的单词 list
:
numbers = forms.ChoiceField(list)
你需要给 ChoiceField 提供一个具体的列表。