Фильтрация пользователей базы Django по нескольким группам

В моем Django проекте я использую базовые модели Django User и Group. Моя цель - получить кверисет User, содержащий все объекты User, которые одновременно назначены нескольким группам. Например, у меня две группы и три пользователя:

from django.contrib.auth.models import User, Group

a = Group.objects.create(name='a')
b = Group.objects.create(name='b')

user_a = User.objects.create_user('a', 'a@a.com', 'a')
user_a.groups.add(a)
user_b = User.objects.create_user('b', 'b@b.com', 'b')
user_b.groups.add(b)
user_ab = User.objects.create_user('ab', 'ab@ab.com', 'ab')
user_ab.groups.add(a)
user_ab.groups.add(b)

Я пробовал фильтровать с помощью __in на группах и Q, но безрезультатно

from django.db.models import Q

User.objects.filter(groups__in=[a,b]).distinct()
<QuerySet [<User: a>, <User: ab>, <User: b>]>
User.objects.filter(Q(groups=a) & Q(groups=b))
<QuerySet []>

Моим ожидаемым результатом будет:

User.objects.filter(???)
<QuerySet [<User: ab>]>

Вы можете реализовать два JOIN, используя два .filter(…) клаузулы [Django-doc], и таким образом фильтровать с:

User.objects.filter(groups=a).filter(groups=b)
Вернуться на верх