我的目标是使用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'))