如何筛选和消除查询集中的重复值?

时间:2017-08-13 18:09:05

标签: python django postgresql django-orm

我在Django + postgres中有这样的表格:

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

每个room_id只能复制一次。我需要找出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过滤方式?

2 个答案:

答案 0 :(得分: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 :(得分:1)

使用distinct(<field name>)方法

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