Django ManyToMany relation — как сделать выборку по AND?
89
19.03, в 14:11
Здравствуйте.
Возможно, кому-то покажется это банальностью, но есть следующая задачка:

Есть моделька:

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


Может, кто подскажет.
Ответы (1)
Сортировать по:
Написать ответ

Войдите, чтобы написать ответ

Войти через TM ID