打印所有用户的关注者

时间:2018-07-16 06:01:11

标签: python django

我正在尝试打印拥有个人资料页面的人的所有关注者。这是我的下表,显示以下关系:

class Following(models.Model):
    target = models.ForeignKey('User', related_name='followers', on_delete=models.CASCADE, null=True)
    follower = models.ForeignKey('User', related_name='targets', on_delete=models.CASCADE, null=True)

    def __str__(self):
        return '{} is followed by {}'.format(self.target, self.follower)

我也在使用Django的auth User模型。

views.py

class FollowersView(DetailView):
    model = User
    slug_field = 'username'
    template_name = 'profile/followers.html'

    def get_profile_followers(user):
        return user.followers.all()

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["follower_list"] = get_profile_followers(self.object) # self.object is user profile
        return context

在模板中,我正在这样做:

    {% for follower in follower_list %}
        <h1>{{ follower }}</h1>
    {% endfor %}

但是,我得到的却是:克里斯跟着约翰。没错,克里斯跟着约翰,但是,我只想显示约翰的用户和avatar表中字段的约翰的属性,例如follower_countUser等。我该怎么办?

1 个答案:

答案 0 :(得分:1)

基于文本,我想您获得Following实例作为{{ follower }}值。因此,您只需使用.语法即可获得以下关注者属性:

{% for follower in follower_list %}
    {{ follower.follower.username }}
    {{ follower.follower.avatar }}
{% endfor %}

请注意,通过.访问相关对象需要附加的数据库查询。因此,您可以在查询集中使用select_related进行优化:

def get_profile_followers(user):
    return user.followers.all().select_related('follower')