2012-10-16 88 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

相關問題