2017-08-13 10 views
3

私はジャンゴ+ postgresの中にこのようなテーブルを持っている:クエリセットの重複値をフィルタリングして排除する方法はありますか?

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

room_idはわずか1時間を複製することができます。私はユーザーがどこにいるのかを把握する必要がありますroom_id。 簡単な方法:

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) 

しかし、任意のSQLフィルタ方法はあ​​りますか?

+0

'.distinct()'を使用します。 –

答えて

3

あなたは美しく、これを行うために.distinctvalues_listを使用することができます。

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

使用distinct(<field name>)方法

rooms = Room.objects.filter(users__in=[user_id_1, user_id_2]).distinct('users') 
関連する問題