【问题标题】:How to select latest object from each group using Django and MySQL?如何使用 Django 和 MySQL 从每个组中选择最新的对象?
【发布时间】: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_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 实现这些相同的结果?

【问题讨论】:

    标签: mysql django django-orm


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      相关资源
      最近更新 更多