Джанго: Сортировать по количеству комментариев - PullRequest
0 голосов
/ 07 февраля 2011

Я пытаюсь упорядочить список предметов в django по количеству комментариев. Однако существует проблема в том, что функция Count не учитывает тот факт, что комментарии django также используют content_type_id для различения комментариев для разных объектов!

Это дает мне небольшую проблему в том, что подсчет комментариев для всех объектов неверен при использовании стандартных методов; Есть ли «хорошее» исправление или мне нужно вернуться к raw sql?

Код для определения правильного порядка:

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

Пример выходных данных запроса (не указывайте идентификатор типа контента):

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

1 Ответ

0 голосов
/ 07 февраля 2011

Думаю, я нашел ответ: Джанго Сниппет

...