2010-04-11 100 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