Фильтрация пользователей базы 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)