我有一个允许对其对象进行评级的模型,我希望能够按最高等级进行过滤,这是一个可以是正整数或负整数的数字范围:
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
个?谢谢你的想法!
答案 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但我不使用这个插件,所以如果这不是你需要的话,做一点研究)