Умножение аннотаций с фильтрацией по отношениям "многие ко многим
У меня есть модели:
class Tag:
name
class User:
tags = M2M to Tag
...
class Bill:
id
tags = M2M to Tag
...
class BillRow:
bill = FK to Bill, related_name='rows'
quantity
...
А я хочу для пользователя отфильтровать счета по тегам и аннотировать с некоторыми агрегатами, например, Count of rows, Sum of quantity...
Bill.objects.filter(tags__in=user_tags).annotate(row_count=Count("rows"))
Проблема в том, что если у User и Bill больше общих тегов (у некоторого User U1 есть user_tags ['T1', 'T2', 'T3'], а у некоторого Bill B1 есть ['T2', 'T3', 'T4']), то результирующий запрос использует внутреннее объединение таблицы Tag для фильтра, и это дублирует в данном примере аннотацию row_count, потому что для каждой строки B1 есть 2 объединенных строки (для обоих общих тегов), которые удовлетворяют условию. Есть ли какое-то решение для такого типа аннотаций конкретно в Django ORM, но в более широком смысле, каким будет оптимальный подход в SQL для получения правильных результатов?