【发布时间】:2021-09-16 00:22:25
【问题描述】:
我想选择每种类型用户的最新帖子。我的模型是这样的:
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_type、date),我想要超过 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 实现这些相同的结果?
【问题讨论】:
标签: mysql django django-orm