2017-06-30 91 views
1

我不知道爲什麼我得到這個錯誤..Django的「用戶」對象不是可迭代

[「用戶」對象不是可迭代]

在這裏,我想在主頁上打印(登錄用戶)關注者。除了錯誤是我的models.py是正確的?追隨者和追隨機制。

模型

class Follow(models.Model): 
    following = models.ForeignKey('auth.User', related_name='following') 
    followers = models.ForeignKey('auth.User', related_name='followers') 

視圖

def profile(request): 
    current_user = request.user 
    twi = Follow.objects.get(pk=current_user.id) 
    display = twi.followers 
    return render(request,'home.html' , 
     {'detail':display,'user':current_user,}) 

模板

{% for o in detail %} 
<h1>o.followers</h1> 
{% endfor %} 
+1

爲什麼* *是你想遍歷呢? –

+0

用戶只是request.user而不是一個列表 – gout

回答

4

你在你的邏輯有一個查詢股價,你detail指的是followers,但是該字段本身是指向單數用戶的鏈接,您需要將此字段設置爲ManyToMany關係,或者使用反向查找來查找用戶關注的內容。

(也Theres在上下文字典流浪逗號可能以後會導致問題..

0
如果你想遍歷 '細節',不想改變模板代碼

,使用一個filter()查詢和設置'display' to result of your filter query.

,或者如果你不打算改變你的看法代碼,你可以從

{% for o in detail %} <h1>o.followers</h1> {% endfor %}

編輯模板代碼只是

<h1>{{detail}}</h1>

+0

如果像其他人那樣添加一些解釋,那就太好了。 –

2

GET返回單個查詢集,你不能遍歷它,如果你使用get

使用本在模板

<h1>{{ detail.followers }}</h1> 

,或者如果您在視圖需要多個

twi = Follow.objects.filter(pk=current_user.id) 

和改變這一行

display = twi.followers 

display = twi 

,並在模板

{% for o in detail %} 
    <h1>{{ o.followers }}</h1> 
{% endfor %} 
+1

get不返回查詢集,但它返回模型類的單個實例。 '.filter'返回一個查詢集,'.get'就像做'。filter()[0]',但如果過濾器結果的長度大於1,它也會失敗 –