4

評価モデルと1対多の関係にある製品モデルがあります。以前は、average_starsフィールドをProductモデルに保存していました。このフィールドは、そのProductモデルに新しい評価が追加されるたびに更新されていました。私はviews.pyに、average_star順に並べられたすべてのProductインスタンスのQuerySetを返す関数があります。.aggregateと.order_byの組み合わせ、またはこれらの線に沿ったものを使用して、これをより動的に行う方法はありますか?

つまり、それぞれの評価モデルすべてから各製品の平均を計算し、その属性で並べ替える方法はありますか?そして、どちらのアプローチが優れていますか?

4

1 に答える 1

5

Ratingモデルにstarsフィールドがあると仮定すると、次を使用する必要がありますannotate

from django.db.models import Avg
Product.objects.annotate(average_stars = Avg('rating__stars')).order_by('-average_stars')
于 2012-09-27T11:17:28.930 に答える