Django Queryset: Фильтр для подмножества отношения "многие ко многим
Предположим следующую модель:
class User(models.Model):
clients = models.ManyToManyField(Client)
Как запросить пользователей по списку клиентов так, чтобы возвращались только те пользователи, у которых назначены не другие клиенты, кроме тех, что есть в данном списке.
User.objects.filter(client__??=[client1, client2])
Я просмотрел документацию Django по поиску полей, но это не помогло.
Заранее спасибо!
clients = [client1, client2] # this is a list but most probably it will be a queryset, it works either way
users = []
for client in clients:
users += client.users.all()
Я думаю, что это нужно сделать с помощью sql EXCEPT
, к которому можно получить доступ queryset.difference()
Итак, идея заключается в том, чтобы взять "ВСЕХ" пользователей и удалить тех, которые соответствуют запросу вашего клиента.
User.objects.all().difference(User.objects.filter(clients__in=excluded_clients))