Я предлагаю вам внести некоторые изменения в вашу модель. Обычно ForeignKey
s делают , а не оканчиваются суффиксом id
, поскольку Django добавляет «двойное поле» с суффиксом _id
, в котором хранится значение целевого поля. Кроме того, вы, вероятно, лучше сделаете ForeignKey
для пользовательской модели. Если вы не укажете первичный ключ самостоятельно, Django автоматически добавит поле с именем id
, которое является AutoField
, и, следовательно, нет необходимости добавлять его вручную. Наконец, вам не нужно хранить vote_count
в поле Movie
, вы можете получить это, посчитав количество связанных Rating
объектов:
from django.conf import settings
class Movie(models.Model):
title = models.CharField(max_length=100)
class Rating(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete.models.CASCADE)
movie = models.ForeignKey(Movie, on_delete=models.CASCADE)
rating = models.IntegerField()
Затем мы можем получить самое высокое с рейтингом mov ie с:
from django.db.models import Avg, Count
higest_rated = Movie.objects.annotate(
rating=Avg('rating__rating'),
votes=Count('rating')
).filter(<b>votes__gte=5</b>).order_by('-rating').first()
Здесь votes__gte=5
будет фильтроваться таким образом, что получит Movie
s только с пятью или более голосами, и мы упорядочим по rating
в порядке убывания.