2011-02-06 4 views
0

J'essaye de commander une liste d'articles dans django par le nombre de commentaires qu'ils ont. Cependant, il semble y avoir un problème en ce que la fonction Count ne prend pas en compte le fait que les commentaires de django utilisent aussi un content_type_id pour discerner entre les commentaires pour différents objets! Cela me pose un léger problème en ce sens que le compte compte pour tous les objets sont faux en utilisant les méthodes standard; Y a-t-il un correctif «gentil» ou dois-je revenir à SQL brut?Django: classement par numéro de commentaires numéro

Code pour essayer de ge l'ordre correct:

app_list = App.objects.filter(published=True) 
.annotate(num_comments=Count('comments')) 
.order_by('-num_comments') 

Exemple de sortie de la requête (note aucune mention de l'identifiant de type de contenu):

SELECT "apps_app"."id", "apps_app"."name", 
"apps_app"."description","apps_app"."author_name", "apps_app"."site_url", 
"apps_app"."source_url", "apps_app"."date_added", "apps_app"."date_modified", 
"apps_app"."published", "apps_app"."published_email_sent", "apps_app"."created_by_id", 
"apps_app"."rating_votes", "apps_app"."rating_score", COUNT("django_comments"."id") AS  
"num_comments" FROM "apps_app" LEFT OUTER JOIN "django_comments" ON ("apps_app"."id" = 
"django_comments"."object_pk") WHERE "apps_app"."published" = 1 GROUP BY 
"apps_app"."id", "apps_app"."name", "apps_app"."description", "apps_app"."author_name", 
"apps_app"."site_url", "apps_app"."source_url", "apps_app"."date_added", 
"apps_app"."date_modified", "apps_app"."published", "apps_app"."published_email_sent", 
"apps_app"."created_by_id", "apps_app"."rating_votes", "apps_app"."rating_score" ORDER 
BY num_comments DESC LIMIT 4 

Répondre