2017-08-13 1 views
3

J'ai la table comme ça dans postgres Django +:Comment filtrer et éliminer les valeurs de doublons dans les jeux de requête?

____________________ 
| room_id | user_id | 
|-------------------- 
| 1  | 100  | 
| 1  | 101  | 
| 2  | 100  | 
| 2  | 102  | 
| 3  | 103  | 
... 

Chaque room_id peut être dupliqués seulement 1 fois. Je dois comprendre room_id où les utilisateurs sont. façon simple:

user_id_1 = 100 
user_id_2 = 101 
rooms = Room.objects.filter(users__in=[user_id_1, user_id_2]) 
temp = [] 
for room in rooms: 
    if room.id in temp: 
     room_id = room.id 
     break 
    else: 
     temp.append(room.id) 

Mais est-il un moyen de filtre sql?

+0

Utiliser '.distinct()' –

Répondre

3

Vous pouvez utiliser .distinct et values_list pour le faire magnifiquement.

rooms = Room.objects.filter(users__in=[user_id_1, user_id_2])\ 
      .distinct("room_id").values_list("room_id", flat=True) 
1

Utilisez la méthode distinct(<field name>)

rooms = Room.objects.filter(users__in=[user_id_1, user_id_2]).distinct('users')