如何使用Django和MySQL从每个组中选择最新的对象



我想选择每种类型的用户的最新帖子。我的模型是这样的:

class UserPost(models.Model):
POST_CHOICES = (
('image', 'Image'),
('text', 'Text'),
('video', 'Video')
)
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
post_type = models.CharField(choices=POST_CHOICES, max_length=10)
posted_at = models.DateTimeField(default=datetime.datetime.now)

我知道可以使用以下查询完成:

UserPost.objects.values('post_type').annotate(date=Max('posted_at'))

但这只返回2列(post_typedate(,并且我想要2列以上。

我通过以下查询在MySQL中实现了这一点:

SELECT P1.post_type, 
P1.post_id, 
P1.posted_at 
FROM   appname_userpost P1, 
(SELECT post_type, 
Max(posted_at) AS max_posted_at 
FROM   appname_userpost 
GROUP  BY post_type) AS P2 
WHERE  P1.posted_at = P2.max_posted_at 
AND P1.post_type = P2.post_type 
AND user_id = 97; 

如何使用Django实现这些相同的结果?

您可以在values中添加您需要的任何列,如下所示:

UserPost.objects.values('post_type', 'post_id', 'posted_at').annotate(date=Max('posted_at'))

相关内容

  • 没有找到相关文章

最新更新