【问题标题】:from list to select menu in django从列表到 Django 中的选择菜单
【发布时间】:2010-09-11 22:29:44
【问题描述】:

我以为我已经弄清楚了,但现在我错过了一些东西。

首先我有一个查询集,记录

records = Record.objects.all()

现在我想把它变成表格的列之一的列表,columnA

alist = records.values_list('columnA')

然后我想将此列表作为参数传递给自定义表单。

FilterForm(alist)

这是我的表格

class FilterForm(forms.Form,list):
    numbers = forms.ChoiceField(list)

但不断收到“类型”对象不可迭代的错误。我不确定问题是否与列表的传递有关,因为当我尝试在 shell 中运行此代码时,我在导入 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

【问题讨论】:

    标签: python django


    【解决方案1】:

    问题是这行中的list这个词:

    numbers = forms.ChoiceField(list)
    

    您需要向 ChoiceField 提供特定列表。

    【讨论】:

    • 啊,python 不是 java...我想做的是让类将列表作为参数。我想它不被称为列表。在java中我会使用构造函数FilterForm(List l)或其他东西,但是,这在python中有什么不同
    【解决方案2】:

    这是一个错误:

    class FilterForm(forms.Form,list):
        numbers = forms.ChoiceField(list)
    

    你使FilterForm成为forms.Form的子类 list;那么您希望list 可用作ChoiceField 的参数。

    我认为您正在寻找动态ChoiceFields

    进一步阅读:

    【讨论】:

      猜你喜欢
      • 2011-12-09
      • 2021-11-10
      • 2022-01-20
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 2015-11-04
      相关资源
      最近更新 更多