2017-08-13 35 views
3

我的表像这样的Django + 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')