【问题标题】:Get the most top liked post ordered by time in django在 django 中获取按时间排序的最受欢迎的帖子
【发布时间】:2017-04-20 20:03:55
【问题描述】:

models.py:

class Post(models.Model):
    author = models.ForeignKey('User')
    text = models.TextField(max_length=320)
    created_date = models.DateTimeField(default=timezone.now)

class Likes(models.Model):
    post = models.ForeignKey('Post')
    liker = models.ForeignKey('User')
    created_date = models.DateTimeField(default=timezone.now)

    class Meta:
        unique_together = ('post', 'liker')

我想获取他们点赞数超过 70 的最新帖子。如何使用 django orm 编写该查询集?

【问题讨论】:

  • 为什么不试试通过阅读文档学到的知识?
  • @Sayse 在这个想法之前,我在我的 Post 模型中使用了一个整数字段来保持喜欢计数,并且我使用了过滤器 Post.objects.filter(like__gt=70).order_by('created_date').all(),但它并不是唯一的喜欢。我创建了另一个类,我想以这种方式使用该查询。

标签: django django-models django-queryset django-orm


【解决方案1】:

您需要注释喜欢的数量,然后对其进行过滤

Post.objects.annotate(num_likes=Count('likes')).filter(num_likes__gt=70).order_by('-created_date')

【讨论】:

    【解决方案2】:

    你可以像这个例子那样做 QV。

    qv = Likes.objects.filter(liker__gt = 70).all()
    out = Post.objects.filter(id__in=qv).order_by('-created_at')
    

    【讨论】:

    • 感谢您的回答,但它不起作用,我认为liker__gt = 70 不正确,因为liker 是用户模型的主键。
    猜你喜欢
    • 1970-01-01
    • 2012-05-08
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多