Для данного фильма some_movie
вы можете получить набор связанных Rating
с, с:
some_movie.rating_set.all()
Если вы хотите рассчитать, для Каждый фильм, средний рейтинг, вы можете .annotate(..)
свой Movie
набор запросов, например с:
from django.db.models import <b>Avg</b>
Movie.objects.annotate(
avg_rating=<b>Avg('rating__rating')</b>
)
В этом случае, Movie
s в, что queryset будет иметь атрибут .avg_rating
, который содержит среднее значение оценок (или None
, если оценок нет).
Мы также можем использовать эту аннотацию для целей фильтрации,например, следующее даст нам все фильмов со средним рейтингом, большим или равным 3
:
# movies with an average rating larger than or equal to 3
from django.db.models import Avg
Movie.objects.annotate(
avg_rating=Avg('rating__rating')
).filter(
<b>avg_rating___gte=3</b>
)
Мы также можем использовать это для заказа наших фильмов, например, для заказаMovie
s от больших средних оценок до меньших средних оценок:
# order movies best to worse (by average rating)
from django.db.models import Avg
Movie.objects.annotate(
avg_rating=Avg('rating__rating')
).<b>order_by('-avg_rating')</b>