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

2024-06-01 05:25:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

    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\u id似乎是主键,是的,它链接到my DB中的正确键。。但我不知道让它输出实际的名字/电子邮件或任何基于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)

还有一个问题-是否可以基于用户模型中存在的布尔值进行过滤?你知道吗


Tags: friendidbyobjectsrequestcountcontextorder
2条回答

尝试以下代码

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 %}

假设friend是一个FK到User的模型,它包含名为emailfirst_name(和last_name)的字段,您可以在.values(...)部分中指定这些字段,如下所示:

Referrals.objects.values('friend_id', 'friend__email', 'friend__first_name') ...

相关问题 更多 >