Django annotate based on another annotate create a duplicate query

Я хочу вычислить количество членов группы (no_members), сумму баллов членов группы (point) и средний балл на человека (avg_point) для каждой группы с аннотацией:

groups = StudyGroup.objects.filter(group_filter).select_related('parent').annotate(
        no_members=Count('student', distinct=True),
        point=Sum('student__point__point', filter=point_filter),
        avg_point=ExpressionWrapper(F('point') / F('no_members'), output_field=FloatField()))

но когда я проверяю запрос (groups.query) в avg_point вместо использования point/no_members запрос становится SUM(study_league_point.point) / COUNT(DISTINCT users_student.user_id) (точка и no_members вычисляются снова). запрос становится:

SELECT
    `study_league_studygroup`.`id`,
    `study_league_studygroup`.`name`,
    `study_league_studygroup`.`parent_id`,
    COUNT(DISTINCT `users_student`.`user_id`) AS `no_members`,
    SUM(`study_league_point`.`point`) AS `point`,
    (
        SUM(`study_league_point`.`point`) / COUNT(DISTINCT `users_student`.`user_id`)
    ) AS `avg_point`,
    `layers_layer`.`id`,
    `layers_layer`.`name`,
    `layers_layer`.`type_id`,
    `layers_layer`.`parent_id`,
    `layers_layer`.`created`,
    `layers_layer`.`default`,
    `layers_layer`.`lft`,
    `layers_layer`.`rght`,
    `layers_layer`.`tree_id`,
    `layers_layer`.`level`
FROM
    `study_league_studygroup`
    LEFT OUTER JOIN `users_student` ON (
        `study_league_studygroup`.`id` = `users_student`.`study_group_id`
    )
    LEFT OUTER JOIN `study_league_point` ON (
        `users_student`.`user_id` = `study_league_point`.`student_id`
    )
    INNER JOIN `layers_layer` ON (
        `study_league_studygroup`.`parent_id` = `layers_layer`.`id`
    )
GROUP BY
    `study_league_studygroup`.`id`

но я хочу использовать (point / no_members) AS avg_point вместо (SUM(study_league_point.point) / COUNT(DISTINCT users_student.user_id)) AS avg_point

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