如何通过汇总相关模型的最后N条记录进行过滤

时间:2019-11-15 23:39:35

标签: django django-models orm django-queryset

我的目标是使用Django ORM开发一个查询,该查询将返回系统中所有其最近50篇帖子中的一半不到被喜欢的用户。

我开发了一个查询,使所有拥有不到一半喜欢的用户的所有用户都获得了查询,但是我不知道如何限制我只希望看到的帖子的范围该用户的前50条帖子。

出于性能原因,我宁愿将操作保留在单个查询中。

我的模型的摘要版本

class User(models.Model):
  pass
class Post(models.Model):
  author = models.ForeignKey(
    "user.User",
    related_name="posts",
    on_delete=models.CASCADE
  )
  likes = models.PositiveIntegerField()

我的现有查询

unpopular_users = User.objects.annotate(
  posts_created=Cast(
    Count('posts'),
    output_field=FloatField()
  ),
  posts_liked=Cast(
    Count(Case(When(posts__likes__gt=0, then=1))),
    output_field=FloatField()
  )
).exclude(posts_created=0).annotate(
  liked_rate=F("posts_liked") / F("posts_created")
).filter(liked_rate__lt=Decimal('0.5'))

0 个答案:

没有答案