首页 > 解决方案 > 打印所有用户的关注者

问题描述

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

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 模型。

视图.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 %}

但是,我却得到了这个:克里斯紧随其后的是约翰。这是正确的,Chris 后面跟着 John,但是,我只想显示 John 的用户和 John 的属性,如avatarfollower_count等,它们是User表中的字段。我怎样才能做到这一点?

标签: pythondjango

解决方案


基于文本,我想您将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')

推荐阅读