Получение результата подсчета с несколькими условиями

У меня есть модели с именем Class, StudentList, Child, TakingQuiz and TakingQuizAnswer. Студенты могут сдавать экзамены. В этом случае, когда они начинают экзамен, данные добавляются в таблицу 'TakingQuiz'. С каждым новым ответом ответы также записываются в таблицу TakingQuizAnswer.

Результат, которого я хочу достичь -> Вопрос с наибольшим количеством ошибок на экзаменах, решенный студентами в классе. Я пытался использовать для этого Count. Я фильтрую answer_is_correct до False, но этого недостаточно. Мне также нужно отфильтровать эти данные для столбца question. Поэтому мне нужно получить строки, в которых оба столбца question и answer_is_correct = False одинаковы, и вернуть первые несколько наиболее повторяющихся данных в качестве результатов.

В своих экспериментах я всегда получаю общий результат. Я не могу включить строки, в которых столбец question одинаковый. Как я могу получить доступ к вопросам с наибольшим количеством ошибок на экзаменах, решенных студентами, обучающимися в классе?

Сериализатор

class ClassSerializerReport(ModelSerializer):
    instructor = InstructorSerializerReport(source="instructor.user")
    students = StudenListSerializerReport(many=True,
                                          source="student_list_class")
    max_incorrect_question = serializers.SerializerMethodField()
    class Meta:
        model = Class
        exclude = [
            "created_at",
            "updated_at",
            "school",
        ]

    def get_max_incorrect_question(self, obj):
        data = Class.objects.filter(id = obj.id).values('student_list_class__child__child_taking_quiz__taking_quizes').annotate(res = Count('student_list_class__child__child_taking_quiz__taking_quizes__question', filter = Q(student_list_class__child__child_taking_quiz__taking_quizes__answer_is_correct = False)))
        print(data)
        return {"question_id" : "I couldn't access that result yet."}

Разные модели

class Class(AbstractSchoolBaseModel):
    school = models.ForeignKey(
        "school.School",
        on_delete=models.CASCADE,
        related_name="classes_school",
        )
    instructor = models.ForeignKey(
        "account.InstructorProfile",
        on_delete=models.CASCADE,
        related_name="instructors_school",
        )
    name = models.CharField(
        max_length=50,
        )
    grade = models.IntegerField(
        )

class StudentList(AbstractSchoolBaseModel):
    school_class = models.ForeignKey(
        "school.Class",
        on_delete=models.CASCADE,
        related_name="student_list_class",
    )
    child = models.ForeignKey(
        "account.ChildProfile",
        on_delete=models.CASCADE,
        related_name="student_list_children",
        )

class ChildProfile(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        primary_key=True,
        related_name="user_child")
    city = models.ForeignKey(
        "country.City",
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name="city_child_profiles")
    hobbies = models.CharField(
        max_length=500,
        null=True,
        blank=True,
        )


class TakingQuiz(AbstractQuizBaseModel):
        quiz = models.ForeignKey("quiz.Quiz", on_delete=models.DO_NOTHING, related_name="quiz_taking_quiz")
        child = models.ForeignKey("account.ChildProfile", on_delete=models.CASCADE, related_name = "child_taking_quiz")
        title = models.CharField(max_length=150, editable=False, default="-")
        total_point = models.PositiveIntegerField(default=0)


class TakingQuizAnswer(AbstractQuizBaseModel):
    taking_quiz = models.ForeignKey("quiz.TakingQuiz", on_delete=models.CASCADE, related_name="taking_quizes")
    question = models.ForeignKey("quiz.Question", on_delete=models.DO_NOTHING, related_name="question_taking_quiz"e)
    answer = models.ForeignKey("quiz.Answer", on_delete= models.DO_NOTHING, related_name="answer_taking_quiz")
    taking_quiz_title = models.TextField(editable=False, null=True, blank=True)
    question_text = models.TextField(editable=False, null=True, blank=True)
    question_topic_content = models.TextField(editable=False, null=True, blank=True)
    answer_text = models.TextField(editable=False, null=True, blank=True)
    answer_is_correct = models.BooleanField(editable=False, null=True, blank=True)
Вернуться на верх