Django ORM оставил соединение с вложенным условием? - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь построить запрос ORM в Django. Сначала посмотрите на схему базы данных.

Стол для совещаний (meeting_meeting)

+----+------+------+
| id | host | name |
+----+------+------+
|  1 |    1 | M1   |
|  2 |    8 | M2   |
|  3 |    1 | M3   |
|  4 |    1 | M4   |
+----+------+------+

Таблица участников (meeting_participants)

+----+------------+---------+
| id | meeting_id | user_id |
+----+------------+---------+
|  1 |          1 |       8 |
|  1 |          3 |       8 |
+----+------------+---------+

Все, что я пытаюсь сделать, - это создать список собраний, которые кто-то создал или присоединился. Например, пользователь 8 создал только одну встречу (M2), но присоединился к двум встречам (M1 и M3). Таким образом, запрос вернет 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 )

Я просто не уверен, как это сделать с ORM в Django. Я нашел ссылку на prefetch_related и выбрал related, но я не могу собрать все воедино.

1 Ответ

1 голос
/ 15 апреля 2019

Использование:

user_id = 8
Meeting.object.filter(Q(host_id=user_id)|Q(participants__user_id=user_id))

Ссылка: Q объектов

...