Django ORM Подсчет без дублирующего столбца

У меня есть таблица под названием История чтения. Я хочу найти среднее количество прочтений в этой таблице. Для этого я написал следующий метод, но не могу получить нужный результат. Записи в таблице делаются один раз (записи учеников с одинаковыми значениями). Когда приходит такая же запись, значение counter увеличивается на единицу.

Например, предположим, что два разных студента прочитали две разные книги. Я ожидаю total reads / 2, но получаю результат total reads / 4, потому что в таблице 4 строки. Как я могу вычислить это? Например, если студент прочитал 4 разные книги один раз, среднее значение будет 1, но среднее значение должно быть 4.

Я пытался использовать distinct и values, но не смог получить желаемый результат. Возможно, мне не удалось использовать их правильно. Также я пытался использовать Avg. Когда avg не дал правильного результата, я попытался разбить его на части и получить значения самостоятельно. Обычно Avg записывалось в Sum.

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

class ClassReadingHistoryReportSerializer(ModelSerializer):
    instructor = InstructorForClassSerializer(source="instructor.user")
    students = StudenListReadingHistoryReportSerializer(many=True,
                                          source="student_list_class")
    avg_read_book = serializers.SerializerMethodField()

    class Meta:
        model = Class
        exclude = [
            "created_at",
            "updated_at",
            "school",
        ]

    def get_avg_read_book(self, obj):
        sum_read_book = Class.objects.filter(id = obj.id).aggregate(sum_read=Sum('student_list_class__child__child_reading_history__counter'))
        count_child_record = Class.objects.filter(id = obj.id).aggregate(count_child=Count('student_list_class__child__child_reading_history'))
        return None

Я забыл добавить в диаграмму столбец counter в таблице BookReadingHistory. Данные диаграммы и таблицы показаны на рисунках ниже.

Таблица

Table

Диаграмма

Diagram

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