Возможно, кому-то покажется это банальностью, но есть следующая задачка:
Есть моделька:
class Room(models.Model):
users = models.ManyToManyField(User, related_name='speakers')
....
Никак не могу понять как сделать через ORM или даже через SQL (одним словом не питонячей логикой) такую выборку:
нужен тот Room в котором есть 2 разных пользователя и только они.
То есть кейс:
Room1 - у которой users = [user1,user2,user3]
Room2 - у которой users = [user1,user3]
Room3 - у которой users = [user1,user2]
Допустим мне нужно найти только те комнаты в которых есть user1 и user2, то есть только Room3.
Через __in ессно будет не то, через Q() & Q() - тоже.
Если кто знает решение на SQL - поделитесь. База PG9.1
Пока нашел только такое кривое решение:
SELECT * FROM (
SELECT messages_rooms_users.room_id, COUNT(messages_rooms_users.room_id) as ctx from messages_rooms_users
WHERE
messages_rooms_users.user_id in (__users_id_list__)
GROUP BY messages_rooms_users.room_id) as subq
WHERE subq.ctx = 2
Может, кто подскажет.