Django ORM запросы

У меня есть такие таблицы:

class ContestQuestions(models.Model):
    contest = models.ForeignKey(Contest, on_delete=models.CASCADE, 
                      related_name='contest_question_contest')
    quetions = models.ForeignKey(Question, on_delete=models.CASCADE, 
                      related_name='contest_question_questions')


class UserResponse(models.Model):
     user = models.ForeignKey(User, on_deleted=models.CASCADE, related_name='user_response')
     response = models.ForeignKey(Answer, on_delete=models.CASCADE, 
                    related_name='user_answer')

Другие связанные таблицы:

class Contest(models.Model):
    name = charfield
    date = charfield
    is_active = bool

class Question(models.Model):
    title = charfield
    created_at = datetimefield

class Answer(models.Model):
     question = FK(Question)
     answer = charfield         #4 options of 1 question
     is_true = bool

Мне нужно получить некоторые статистические данные о каждом тесте. Итак, из каждой викторины я хочу узнать топ-5 наиболее правильно отвеченных вопросов и наиболее неправильно отвеченных вопросов и общее количество людей, которые пытались ответить на этот вопрос.

Как я могу написать запрос для него?

Я бы добавил метод в вашу модель Contest, чтобы вы могли получить доступ к этим данным следующим образом:

class Contest(models.Model):
    ...
    def top_answered_questions(self, correct=True):
        return Questions.objects.filter(
            contest_question_questions__contest=self
        ).annotate(
            correct_answers=Count('answer', filter=Q(answer__is_true=correct))
        ).order_by(correct_answers)

Затем вы можете вызвать contest.top_answered_questions()[:5] и изменить параметр correct, чтобы получить правильно и неправильно отвеченные вопросы.

Вернуться на верх