Django按最高评级过滤查询集

时间:2013-02-16 21:41:42

标签: django filter django-queryset

我有一个允许对其对象进行评级的模型,我希望能够按最高等级进行过滤,这是一个可以是正整数或负整数的数字范围:

class Thing(models.Model):
    user = models.ForeignKey(User)
    created_on = models.DateTimeField(auto_now_add=True)
    rating = VotingField(can_change_vote=True)
    ....

VotingField来自a fork of django-ratings

如何将此查询集过滤到order_by所有rating个对象中的最高Thing个?谢谢你的想法!

1 个答案:

答案 0 :(得分:2)

我不确定您是否需要最高的平均值或最高金额,因此您可能需要更改注释

from django.db.models import Sum, Avg

Thing.objects.annotate(avg_rating=Avg('rating__score')).order_by('-avg_rating')
Thing.objects.annotate(sum_rating=Sum('rating__score')).order_by('-sum_rating')

请参阅https://docs.djangoproject.com/en/dev/ref/models/querysets/#annotate

看起来你正在调用你的VotingField rating,看起来它基本上是Vote模型的许多。因此,我们希望每个Thing的{​​{1}}集合Vote字段的总和或平均值。 (我认为它是我们想要注释的分数字段https://github.com/Kronuz/django-ratings/blob/master/djangoratings/models.py#L15但我不使用这个插件,所以如果这不是你需要的话,做一点研究)