从列表到Django选择菜单

0 投票
2 回答
3386 浏览
提问于 2025-04-16 04:01

我以为我搞明白了,但现在我觉得缺少了什么。

首先,我有一个查询集,叫做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.Formlist 的子类;然后你希望 list 能作为 ChoiceField 的参数使用。

我觉得你是在寻找动态的 ChoiceFields

想了解更多,可以看看:

1

问题出在这一行中的单词 list

numbers = forms.ChoiceField(list)

你需要给 ChoiceField 提供一个具体的列表。

撰写回答