【问题标题】:Get most recent related objects for all objects获取所有对象的最新相关对象
【发布时间】:2020-07-15 13:55:19
【问题描述】:

假设我有以下模型:

from django import models

class Post(models.Model):
    user = models.ForeignKey(to=User, on_delete=CASCADE)
    created = models.DatetimeField(auto_now_add=True)

我想从一组用户那里获取有关最新帖子(例如点赞)的一些信息

posts = User.objects.filter(**params).annotate(most_recent_post=Max('post__created')).annotate(likes=Count('post__likes', filter=Q(post__created=F('most_recent_post'))

当我尝试进行此查询时,我收到以下错误: OperationalError:滥用聚合函数 MAX()

【问题讨论】:

    标签: python django max aggregation operationalerror


    【解决方案1】:
    class Post(models.Model):
        user = models.ForeignKey(User, on_delete=CASCADE)
        created = models.DatetimeField(auto_now_add=True)
        class Meta:
            ordering = ['-created'] # ordering Post by created date DESC 
    def recent(request):
        user = request.user
        recent_post = user.post_set.all().first() # get the recent post
        counter = user.post_set.all().count() # count all posts by this user
    

    【讨论】:

    • 这为我提供了一位用户的最新帖子。我想获取一组用户的最新信息
    • 因为帖子是有序的 DESC,所以修改 ordering = ['-created','user'] :recent_post = Post.objects.distinct('user') 或者直接在你的views func: Post .objects.order_by('user', '-created').distinct('user')
    【解决方案2】:

    试试这个来获取最近的帖子:

    posts = Post.objects.order_by('-id').all()
    

    计数使用:

    posts = Post.objects.order_by('-id').all().count()
    

    【讨论】:

    • 这为我提供了一位用户的最新帖子。我想获取一组用户的最新帖子。我不想计算一个用户有多少帖子,我想计算每个用户最近的帖子有多少赞
    • @ValérioNogueira 它会给你所有最近的帖子
    • @ValérioNogueira 试试我的解决方案,它将为您提供所有用户的所有最新帖子
    • 但我只想要每个用户的最新帖子,而不是所有按 id 排序的帖子
    • @ValérioNogueira 你想要多少帖子?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    相关资源
    最近更新 更多