Django count queryset,显示对象而不是PK

时间:2018-09-24 13:29:42

标签: python django

我写了一个查询,对从最大到最小的计数计数查询进行排序。基本上是排名系统。

    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)

另一个问题-是否可以根据用户模型中存在的布尔值进行过滤?

2 个答案:

答案 0 :(得分:2)

假设friend是FK到User模型,其中包含名为emailfirst_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 %}