2017-06-30 95 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,它也会失败 –