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语句的方法

4 条评论 发表在“DJango:查找被评论次数最多的前十篇文章(order_by count of related objects)”上

  1. slide说道:

    算是路过吧,评论也是直接拿comments做的~还得填写邮件。建议修改! :w

  2. slide说道:

    还有,觉得我自己很白痴~ :d

  3. transtone说道:

    离当时的七八月已经很久了,我是来问简单方法的,万望回复,谢谢。

  4. 半瓶墨水说道:

    @transtone

    http://docs.djangoproject.com/en/dev/topics/db/aggregation/

    其实这类问题自己搜索更快,搜索“django order by foreign key”

留下回复