1

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

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

VotingField来自django-ratings的一个分支

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

4

1 回答 1

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的Sum 或 Avg 。(我认为它是我们想要注释的分数字段https://github.com/Kronuz/django-ratings/blob/master/djangoratings/models.py#L15但我不使用这个插件所以做一些研究如果这不是你需要的)Votescore

于 2013-02-16T22:00:11.050 回答