Django ORM 左加入嵌套条件?
Django ORM left join with nested condition?
我正在尝试在 Django 中构建 ORM 查询。首先请查看数据库架构。
会议 Table ( meeting_meeting )
+----+------+------+
| id | host | name |
+----+------+------+
| 1 | 1 | M1 |
| 2 | 8 | M2 |
| 3 | 1 | M3 |
| 4 | 1 | M4 |
+----+------+------+
参与者 Table ( meeting_participants )
+----+------------+---------+
| id | meeting_id | user_id |
+----+------------+---------+
| 1 | 1 | 8 |
| 1 | 3 | 8 |
+----+------------+---------+
我想做的就是生成某人创建或加入的会议列表。例如,用户 8 仅创建了一个会议 (M2),但加入了两个会议(M1 和 M3)。所以查询将 return M1,M2 和 M3 作为 Meeting QueryDict.
我已经用纯 sql 完成了查询。
SELECT DISTINCT meeting_meeting.id, meeting_meeting.* FROM meeting_meeting
LEFT JOIN meeting_participants on meeting_participants.meeting_id = meeting_meeting.id
and ( meeting_meeting.host_id = 8 OR meeting_participants.user_id = 8 )
我只是不确定如何在 Django 中使用 ORM 来做到这一点。我确实找到了一些关于 prefetch_related 和 select 相关的参考资料,但我似乎无法将它们拼凑起来。
使用:
user_id = 8
Meeting.object.filter(Q(host_id=user_id)|Q(participants__user_id=user_id))
参考:Q objects
我正在尝试在 Django 中构建 ORM 查询。首先请查看数据库架构。
会议 Table ( meeting_meeting )
+----+------+------+
| id | host | name |
+----+------+------+
| 1 | 1 | M1 |
| 2 | 8 | M2 |
| 3 | 1 | M3 |
| 4 | 1 | M4 |
+----+------+------+
参与者 Table ( meeting_participants )
+----+------------+---------+
| id | meeting_id | user_id |
+----+------------+---------+
| 1 | 1 | 8 |
| 1 | 3 | 8 |
+----+------------+---------+
我想做的就是生成某人创建或加入的会议列表。例如,用户 8 仅创建了一个会议 (M2),但加入了两个会议(M1 和 M3)。所以查询将 return M1,M2 和 M3 作为 Meeting QueryDict.
我已经用纯 sql 完成了查询。
SELECT DISTINCT meeting_meeting.id, meeting_meeting.* FROM meeting_meeting
LEFT JOIN meeting_participants on meeting_participants.meeting_id = meeting_meeting.id
and ( meeting_meeting.host_id = 8 OR meeting_participants.user_id = 8 )
我只是不确定如何在 Django 中使用 ORM 来做到这一点。我确实找到了一些关于 prefetch_related 和 select 相关的参考资料,但我似乎无法将它们拼凑起来。
使用:
user_id = 8
Meeting.object.filter(Q(host_id=user_id)|Q(participants__user_id=user_id))
参考:Q objects