Максимальное количество вхождений внешнего ключа в запрос

Я пытаюсь получить элемент с наибольшим количеством вхождений внешнего ключа (votes) внутри набора запросов (Questions, Choices).

Т.е. мне нужно получить самый популярный голос, чтобы установить атрибут 'winner' в JsonResponse.

Помогите, как я могу это выяснить?

Вот мое мнение.

allchoices = [{
    'id':i.id,
    'question':i.question.id,
    'choice_text':i.choice_text,
    'votes':i.voter_set.all().count()
} for i in poll_choices]
return JsonResponse({
    "votes":choice.voter_set.all().count(),
    'winner':True,
    'success':True,
    'allchoices':allchoices
},safe=False,)

Вот мои модели:

class Voter(models.Model):
    # Authentication of anonymous users
    choice = models.ForeignKey('PollChoice', on_delete=models.CASCADE)
    question = models.ForeignKey('PollQuestion', on_delete=models.CASCADE)
    

class PollChoice(models.Model):
    question = models.ForeignKey('PollQuestion', on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    
    def __str__(self):
        return self.choice_text
    

class PollQuestion(models.Model):
    question = models.CharField(max_length=200)
    created = models.DateTimeField(auto_now_add=True)
    creator = models.ForeignKey('poll_creator',/\
         on_delete=models.CASCADE, null=False, blank=False)
    uuid = ShortUUIDField(length=8, max_length=12)
    
    def poll_choices(self):
        return self.pollchoice_set.all().annotate(voters=/\
            models.Count(models.F('voter'))).order_by('-voters')
    
    def choices(self):
        return self.pollchoice_set.all()

    def __str__(self):
        return f'{self.question}'

Вы можете заказать по количеству связанных Voter, с:

from django.db.models import Count

poll_choice = PollChoice.objects.alias(
    num_voters=Count('voter')
).latest('num_voters')

это позволит получить PollChoice с наибольшим количеством связанных Voter. Вы можете фильтровать PollChoice далее, например, рассматривать только PollChoice для определенного PollQuestion с:

from django.db.models import Count

poll_choice = PollChoice.objects.filter(question=my_question).alias(
    num_voters=Count('voter')
).latest('num_voters')
Вернуться на верх