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


