【问题标题】:Django: Order by number of comments issueDjango:按评论数量排序
【发布时间】:2011-02-06 22:29:59
【问题描述】:

我正在尝试按它们拥有的 cmets 数量在 django 中排序项目列表。但是,似乎存在一个问题,即 Count 函数没有考虑到 django cmets 还使用 content_type_id 来区分不同对象的 cmets 的事实!

这给了我一个小问题,因为使用标准方法时所有对象的注释计数都是错误的;有没有“不错”的修复方法,还是我需要退回到原始 sql?

尝试获取正确顺序的代码:

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

查询的示例输出(注意没有提及内容类型 ID):

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

【问题讨论】:

    标签: django django-comments


    【解决方案1】:

    我想我找到了答案:Django Snippet

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多