python - 打印所有用户的关注者
问题描述
我正在尝试打印拥有个人资料页面的人的所有关注者。这是我的下表,显示了以下关系:
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 的属性,如avatar
、follower_count
等,它们是User
表中的字段。我怎样才能做到这一点?
解决方案
基于文本,我想您将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')
推荐阅读
- r - 如何在 Shiny 应用程序中编写模块化或更多 DRY selectizeInput 检查空值/全部
- google-bigquery - 我的服务帐号即使拥有足够的权限也无法访问 BigQuery 数据
- algorithm - 数据元素和数据对象有什么区别?
- python - ImportError:如何导入 python 模块?
- chef-infra - 如何根据我在 Chef 中的环境设置属性的值?
- python - python,pandas - 在多索引系列中选择组
- java - 在二维数组中查找多个匹配数字并返回一个布尔数组
- python - Python cv2 绘图和坐标出现意外
- uipath - 如何设置 UiPath 机器人的屏幕分辨率?
- javascript - Google Cloud Vision API 将所有图片检测为不当