代码之家  ›  专栏  ›  技术社区  ›  user2896120

打印所有用户的关注者

  •  0
  • user2896120  · 技术社区  · 6 年前

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

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

    视图.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的属性,比如 avatar 我是说, follower_count ,等等。 User 桌子。我该怎么做呢?

    1 回复  |  直到 6 年前
        1
  •  1
  •   neverwalkaloner    6 年前

    根据文本,我想你可以 Following 实例为 {{ follower }} 价值。所以你可以用 . 获取如下跟随者属性的语法:

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

    注意,通过 是的。 需要额外的数据库查询。所以你可以用 select_related 在您的QuerySet中进行优化:

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