在Django/Python中按查询集计数排序列表
抱歉,这个问题比较基础,但我刚接触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())
非常有用。