Django получить объекты, которые имеют определенные отношения ManyToMany

предположим, что у нас есть две такие модели:

class User(models.Model):
    name = models.CharField(max_length=255)
    date_joined = models.DateField()
    
class Group(models.Model):
    title = models.CharField(max_length=255)
    users = models.ManyToManyField(User)

мы получаем набор пользователей:

user_qs = User.objects.filter(date_joined__range=['2022-01-01', '2022-01-05'])

как я могу получить список объектов Group, которые имеют в пользователях всех пользователей user_qs?

django==3.2
Group.objects.filter(users__date_joined__range=['2022-01-01', '2022-01-05'])

Вы можете составить набор из Group, а затем проверить, все ли они совпадают, с помощью:

from django.db.models import Count

user_qs = User.objects.filter(date_joined__range=['2022-01-01', '2022-01-05'])

Group.objects.filter(
    users__in=user_qs
).alias(
    nusers=Count('users')
).filter(
    nusers=len(user_qs)
)
Вернуться на верх