在Django/Python中按查询集计数排序列表

2 投票
1 回答
1067 浏览
提问于 2025-04-16 12:36

抱歉,这个问题比较基础,但我刚接触Python和Django。

我有一个用户列表,这些用户执行了一项操作,相关信息保存在一个单独的表格里。我想根据他们执行另一项操作的次数,来显示这些用户的列表,并进行排序。

我知道怎么获取这些次数:

users = User.objects.all()
for user in users:
    print user.action_set.count()

而且我也知道怎么在我的模板中显示这些次数:

{% for user in users %}
    {{ user.action_set.count }}
{% endfor %}

但是我不太确定怎么根据这些操作的次数来对用户进行排序。

1 个回答

4

注释 / 聚合

http://docs.djangoproject.com/en/dev/topics/db/aggregation/

from django.db.models import Count
users = User.objects.annotate(action_count=Count('action')).order_by('action_count')
# note that this also saves your extra query PER user object.

{% for user in users %}
   {{ user.action_count }}
{% endfor %}

供以后参考,如果你不能通过数据库进行排序,你可以用Python对任何列表进行排序...

my_list.sort(key=lambda x: x[2])

my_list.sort(key=lambda x: x.method())

非常有用。

撰写回答