Я начинаю с Django и хочу получать фильмы с более высоким рейтингом, и я не знаю, как найти способ использовать состояние моей модели. Теперь это мои занятия:
class Movie(models.Model):
movieId = models.IntegerField(unique=True)
title = models.TextField(max_length=100)
anno = models.IntegerField()
imdbId = models.IntegerField(unique=True)
tmdbId = models.IntegerField(unique=True)
def __str__(self):
return self.title
class Rating(models.Model):
rating = models.IntegerField()
timestamp = models.IntegerField()
user = models.ForeignKey(User, on_delete = models.CASCADE)
movie = models.ForeignKey(Movie, on_delete = models.CASCADE)
def __str__(self):
return str(self.user)+"--"+str(self.rating)
Да, прости. У всех фильмов есть объекты рейтинга, поэтому лучшими являются фильмы с лучшим средним рейтингом. А класс рейтинга имеет целочисленный атрибут рейтинга.





Для данного фильма some_movie вы можете получить набор СвязанныйRating с:
some_movie.rating_set.all()
Если вы хотите рассчитать для фильма каждый рейтинг средний, вы можете .annotate(..) свой набор запросов Movie, например, с помощью:
from django.db.models import Avg
Movie.objects.annotate(
avg_rating=Avg('rating__rating')
)В этом случае Movie в наборе запросов тот будет иметь атрибут .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(
avg_rating___gte=3
)Мы также можем использовать это, чтобы упорядочить наши фильмы, например, упорядочивая Movie от более высоких средних оценок до более низких средних оценок:
# order movies best to worse (by average rating)
from django.db.models import Avg
Movie.objects.annotate(
avg_rating=Avg('rating__rating')
).order_by('-avg_rating')
Фильмы с более высокой оценкой, чем Какие? Как здесь оцениваются фильмы? Среднее? Что делать, если у фильма нет оценок?