Как посмотреть с помощью ключей? - PullRequest
0 голосов
/ 08 декабря 2018

Я начинаю с 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)

1 Ответ

0 голосов
/ 08 декабря 2018

Для данного фильма 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...