Как работает set_group_by в Django?

Я писал следующий запрос:

claim_query = ClaimBillSum.objects.filter(claim__lob__in = lobObj)\
        .annotate(claim_count = Count("claim__claim_id", distinct=True))\
        .annotate(claim_bill_sum = Sum("bill_sum"))\
        .values("claim__body_part", "claim_count", "claim_bill_sum")\
        .order_by("claim__body_part")

Когда я проверил свойство запроса, он группировался по всем свойствам таблиц, связанных в этом запросе, а не только по тем, которые были выбраны в функции values(), когда я хотел группироваться только по claim__body_part.

Пока я искал способ изменить инструкцию group by, я нашел функцию query.set_group_by(), которая, будучи примененной, исправила запрос так, как я хотел:

claim_query.query.set_group_by()

SELECT
    "CLAIM"."body_part",
    COUNT(DISTINCT "claim_bill_sum"."claim_id") AS "claim_count",
    SUM("claim_bill_sum"."bill_sum") AS "claim_bill_sum"
FROM
    "claim_bill_sum"
INNER JOIN "CLAIM" ON
    ("claim_bill_sum"."claim_id" = "CLAIM"."claim_id")
WHERE
    "CLAIM"."lob_id" IN (SELECT U0."lob_id" FROM "LOB" U0 WHERE U0."client_id" = 1)
GROUP BY
    "CLAIM"."body_part"
ORDER BY
    "CLAIM"."body_part" ASC

Но я не смог найти никакой информации в документации Django или где-либо еще, чтобы лучше описать, как работает эта функция. Почему группа по умолчанию выбирает все свойства, и как работает .set_group_by(), выбирая именно то свойство, которое я хотел?

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