我写了一个查询,对从最大到最小的计数计数查询进行排序。基本上是排名系统。
users = Referrals.objects.values('friend_id').annotate(Count('friend_id')).order_by('-friend_id__count')
它以json格式返回该值
<QuerySet [{'friend_id': 1, 'friend_id__count': 2}, {'friend_id': 5, 'friend_id__count': 1}]>
现在friend_id似乎是主键,是的,它链接到我的数据库中正确的一个。.但是我不知道要让它输出实际的姓名/电子邮件或基于该名称的任何内容PK?
这是我想要显示排名的模板。
{% for a in users %}
<tr>
<td>{{a}}</td>
<td>{{a}}</td>
</tr>
{% endfor %}
这是我的全部观点。
@login_required
def statspage(request):
users = Referrals.objects.values('friend_id').annotate(Count('friend_id')).order_by('-friend_id__count')
print(users)
context = {
'users': users,
}
return render(request, 'stats.html', context)
另一个问题-是否可以根据用户模型中存在的布尔值进行过滤?
答案 0 :(得分:2)
假设friend
是FK到User
模型,其中包含名为email
和first_name
(以及last_name
)的字段,则可以在.values(...)
部分如下:
Referrals.objects.values('friend_id', 'friend__email', 'friend__first_name') ...
答案 1 :(得分:0)
尝试下面的代码
users = Referrals.objects.all().annotate(
friend_count=Count('friend_id')
).order_by('-friend_count')
使用values
时,它将仅返回您指定的db列。
您可以在模板中访问
{% for user in users %}
<tr>
<td>{{user.first_name}}</td>
<td>{{user.last_name}}</td>
<td>{{user.friend_count}}</td>
</tr>
{% endfor %}