我在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过滤方式?
答案 0 :(得分:3)
您可以使用.distinct
和values_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')