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)
)