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合計または平均が必要です。( https://github.com/Kronuz/django-ratings/blob/master/djangoratings/models.py#L15に注釈を付けたいスコアフィールドだと思いますが、このプラグインは使用していません。これはあなたが必要とするものではありません)ThingVotescore

于 2013-02-16T22:00:11.050 に答える