Python 如何使用distinct筛选多个字段?

Python 如何使用distinct筛选多个字段?,python,django,django-models,django-orm,Python,Django,Django Models,Django Orm,我使用的是Django+postgres,有以下模型: class Room(models.Model): users = models.ManyToManyField(settings.AUTH_USER_MODEL) type = models.IntegerField(default=1) 房间表格数据示例: ____________________ | id | type | |-------------------- | 1 | 1 |

我使用的是Django+postgres,有以下模型:

class Room(models.Model):
    users = models.ManyToManyField(settings.AUTH_USER_MODEL)
    type = models.IntegerField(default=1)
房间
表格数据示例:

____________________
| id      | type  |
|--------------------
| 1       | 1     |
| 2       | 1     |
| 3       | 2     |
 ...
____________________
| room_id | user_id |
|--------------------
| 1       | 100     |
| 1       | 101     |
| 2       | 100     |
| 2       | 102     |
| 3       | 103     |
 ...
room\u用户
表格数据示例:

____________________
| id      | type  |
|--------------------
| 1       | 1     |
| 2       | 1     |
| 3       | 2     |
 ...
____________________
| room_id | user_id |
|--------------------
| 1       | 100     |
| 1       | 101     |
| 2       | 100     |
| 2       | 102     |
| 3       | 103     |
 ...
Q:如何获取
房间id
,其中只有两个用户参与,房间类型为
1
?如您所知,
ManyToManyField
自动创建
room\u用户
表。如果我直接访问
room_用户
,下面是示例代码,但我不知道如何访问(
room_用户
,因为
ManyToManyField
,所以在django中没有显示为模型):

对于这种情况,错误为:

django.core.exceptions.FieldError: Cannot resolve keyword 'room_id' into field. Choices are: date_joined, email, first_name, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, password, user_permissions, username
我添加了另一个类型为1的房间进行测试,一个用户留在房间里 使用最终GET2的外壳,我更喜欢分两部分来完成


当你考虑到性能问题时,我不知道这是解决你问题的最好办法。

我的想法

user1 = User.objects.get(id=100).room_set.all()
user2 = User.objects.get(id=101).room_set.all()

same_room = user1.intersection(user2)

检查您是否需要

我知道您想查找user1和user2同时拥有的房间号,对吗?为什么不直接像
Room.objects.filter(users\u-in=[user\u-id\u-1,user\u-id\u-2],type=1)那样进行查询呢?不同的(“id”)。值列表(“id”,flat=True)
?因为它打印了错误的答案。它会打印所有找到
用户id\u 1
用户id\u 2
的房间id,谢谢您的回复。您的答案中
user\u id\u 1
user\u id\u 2
在哪里?我更新了示例。您的标准是:获取room_id,其中只有2个用户参与,并且room的类型为1。你打算每次都在用户ID中硬编码以进行过滤吗?@sirjay你尝试过修订吗?