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
, чтобы получить правильно и неправильно отвеченные вопросы.