我正在尝试打印拥有个人资料页面的人的所有关注者。这是我的下表,显示以下关系:
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_count
,User
等。我该怎么办?
答案 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')