2011-02-27 74 views
2

對不起,這是基本的,但我是Python和Django的新手。在Django/Python中按queryset count排序的列表

我有一個用戶誰已經執行了一個單獨的表中保存的操作的用戶列表。我想顯示這些用戶的列表,按照他們採取其他操作的次數排序。

我瞭解如何獲得數:

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

而且我知道如何顯示我的模板計數:

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

但我不知道如何把它排序用戶通過計數設置的動作。

回答

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

以供將來參考,如果你不能排序的DB,您可以排序蟒蛇任何列表...

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

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

非常有用的。