2012-10-16 50 views
0

在我的表单我有这个获取对象不是可迭代的错误

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. 

有没有人知道什么问题在以前的方法

+0

''objects''应该是可迭代的,''User''不是一个模型,或者这不是错误发生的地方。我敢打赌后者,因为这个错误通常会在循环中出现。 –

+0

废话它可以返回一个空的列表,可能导致此错误。 –

+0

用户是一个模型,我甚至尝试过User.objects.all()。它说同样的错误。我正在尝试所有的模型名称,并提出相同的错误。我正在尝试这在forms.py。是可以的问题 – user825904

回答

1

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

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

UPDATE 的选择必须是迭代的2元组。首先是将在POST请求参数中返回的值,UI上显示的第二个字符串表示形式。可能是,它是有道理的做这样的事情:

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

您将获得:

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

当用户选择的选项和岗位的形式,您将收到用户ID参数,所以你会能够通过它检索用户对象。

+0

我试过了,仍然是相同的错误 – user825904

+0

@ user1730491,用可能的解决方案对它进行了更新。 – Marboni

相关问题