2010-04-11 10 views
0

Je le modèle suivant:django trier par rapport ManyToMany

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

Maintenant, si je veux obtenir tous les services ayant une note triées par ordre décroissant je fait quelque chose:

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) 

Comme vous pouvez le voir C'est un processus en trois étapes et je ne me sens pas bien à ce sujet. Quelqu'un qui connaît une meilleure façon de le faire?

Répondre

3

Que diriez-vous:

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

doux! Merci!!! – Marconi

+0

+1 c'est génial .... thnks – suhailvs

Questions connexes