2010-04-11 103 views
0

我有以下型號:Django的排序多對多關係

class Service(models.Model): 
    ratings = models.ManyToManyField(User) 

現在,如果我想獲得的所有服務,以降序我做了分類評級:

services_list = Service.objects.filter(ratings__gt=0).distinct() 
services_list = list(services_list) 
services_list.sort(key=lambda service: service.ratings.all().count(), reverse=True) 

正如你所看到的這是一個三步過程,我對此感覺不太對。任何人都知道更好的方法來做到這一點?

回答

3

如何:

service_list = Service.objects.annotate(ratings_num=Count('ratings')).filter(ratings_num__gt=0).order_by('-ratings_num') 
+0

甜蜜!謝謝!!! – Marconi 2010-04-12 04:57:16

+0

+1 this is awsome .... thnks – suhailvs 2013-10-24 12:04:57