DJango:查找被评论次数最多的前十篇文章(order_by count of related objects)

作者:半瓶墨水 链接:http://www.2maomao.com/blog/django-order-by-count-of-related-objects/

按照关联表的数量排序,这是一个很常见的操作,比如说:查找被评论次数最多的前十篇文章。

在DJango中做起来不是很方便,看了半天没找到,django-user讨论组问了一下,有人回答说简单的方法七八月才会支持。现在只能用Extra或者裸奔SQL语句

我选择了Extra来做,Extra在原来的数据表上面加了一个额外的列,然后按照这个列排序就行。

top10commented = Post.objects.extra(
        
select = {
            
'comment_count': 'SELECT COUNT(*) FROM myapp_comment WHERE myapp_comment.post_id = myapp_post.id'
        },
        
).order_by('-comment_count')[0:10];

其中:myapp是我的Django App名称,comment和post是 “评论” 和 “文章” 数据表。

Update: sigh,最终为了效率采用了裸写SQL语句的方法

555,本篇现在一条评论也没有,雁过留声,人过留名,各位乡亲父老,有钱的捧个钱场,没钱的捧个人场......

发表评论

  • :(
  • :)
  • :D
  • :X
  • :^
  • :d
  • :e
  • :h
  • :k
  • :l
  • :p
  • :q
  • :s
  • :v
  • :w
  • :x

注意:评论中需包含至少一个中文字,否则视为无效