预取django中有限数量的相关对象



我想显示每个帖子有5个最新评论的帖子列表。我如何做到这一点与最小数量的数据库查询?

Post.objects.filter(...).prefetch_related('comment_set')

检索所有注释,而我只需要其中的一些。

我将使用两个查询。首先获取帖子:

posts = list(Post.objects.filter(...))

现在使用UNION运行原始SQL查询(注意:为了简单起见省略了顺序):

sql = "SELECT * FROM comments WHERE post_id=%s LIMIT 5"
query = []
for post in posts:
    query.append( sql % post.id )
query = " UNION ".join(query)

并运行:

comments = Comments.objects.raw(query)

之后,你可以循环遍历注释并将它们分组到Python端。

我还没试过,不过看起来还行。

你的问题还有其他可能的解决方案(可能只需要一个查询),看看这个:

http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

最新更新