在django表单中获取对象不可迭代的错误

时间:2012-10-16 09:01:35

标签: python django

以我的形式,我有这个

 mychoices = User.objects.filter(category__name='city')

我收到此错误

User Object is not iterable。我是django的新手

这是下一行

relevance = forms.MultipleChoiceField(choices=mychoices, widget=forms.CheckboxSelectMultiple())

如果我评论此行,那么我没有看到任何错误

编辑:

我发现错误,我不得不使用此

(choices=[ (o.id, str(o)) for o in User.objects.all()])  Then it works.

有谁知道以前方法中的问题是什么

1 个答案:

答案 0 :(得分:2)

您只需要指定窗口小部件类,而不是调用构造函数:

relevance = forms.MultipleChoiceField(choices=mychoices, widget=forms.CheckboxSelectMultiple)

<强>更新 选择必须是2元组的可迭代。首先是将在POST请求参数中返回的值,在UI上显示第二个字符串表示。也许,做这样的事情是有道理的:

choices = User.objects.filter(category__name='city').values_list('id', 'first_name')

你会得到:

(1, 'Mark')
(2, 'Jack')
...

当用户选择选项并发布表单时,您将在参数中收到用户ID,这样您就可以通过它检索用户对象。