Как искать заграничные ключи?

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

Фильмы с более высокой оценкой, чем Какие? Как здесь оцениваются фильмы? Среднее? Что делать, если у фильма нет оценок?

Willem Van Onsem 08.12.2018 11:15

Да, прости. У всех фильмов есть объекты рейтинга, поэтому лучшими являются фильмы с лучшим средним рейтингом. А класс рейтинга имеет целочисленный атрибут рейтинга.

Carlos Castaño del Castillo 08.12.2018 11:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
34
1

Ответы 1

Для данного фильма 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')

Другие вопросы по теме