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. Данные диаграммы и таблицы показаны на рисунках ниже.
Таблица
Диаграмма