Python 如何使用distinct筛选多个字段?
我使用的是Django+postgres,有以下模型: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 |
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你尝试过修订吗?