对不起,这是基本的,但我是Python和Django的新手。
我有一个已执行保存在单独表格中的操作的用户列表。我想显示这些用户的列表,按照他们采取其他操作的次数排序。
我理解如何获得计数:
users = User.objects.all()
for user in users:
print user.action_set.count()
我了解如何在模板中显示计数:
{% for user in users %}
{{ user.action_set.count }}
{% endfor %}
但是我不确定如何根据动作集的计数对用户进行排序。
答案 0 :(得分: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())
非常有用。