不同用户的最新帖子

时间:2011-06-09 03:35:48

标签: django

发布有用户和日期属性。

我该如何转动

posts = Post.objects.order_by('-date')[:30]

给我30个或更少的帖子,包括每个用户的最后一个帖子?

例如,如果我有4个帖子存储,3个来自post.user =“Benny”,1个来自post.user =“Catherine”它应该从Benny返回1个帖子,1个来自Catherine,按日期排序。

2 个答案:

答案 0 :(得分:3)

我可能会使用annotate,您可以使用extra来查看单个查询。

posts = []
for u in User.objects.annotate(last_post=Max('post__date')).order_by('-last_post')[:30]:
    posts.append(u.post_set.latest('date'))

您还可以使用raw,它可以让您编写SQL查询,但仍会返回模型实例。例如:

sql = """
SELECT * FROM app_post
WHERE app_post.date IN
    (SELECT MAX(app_post.date) FROM app_post
     GROUP BY app_post.user_id)
ORDER BY app_post.date DESC
"""
posts = list(Post.objects.raw(sql))

答案 1 :(得分:0)

未经测试,但您可以这样做

from django.db.models import Max
Post.objects.all().annotate(user=Max('date'))