Django ORM select distinct list of models where a foreign key exists

В моем проекте Django у меня есть две модели, которые связаны друг с другом посредством отношения внешнего ключа:

Invite (has one Event) to Event (has many invites)

Я могу выбрать список соответствующих приглашений, которые меня интересуют, следующим образом:

invites = Invite.objects.filter(guest = guest)

Я мог бы получить доступ к каждому событию по приглашению, но это, скорее всего, приведет к дублированию. Исходя из вышесказанного, я хотел бы получить уникальный список событий.

Каков наилучший способ достичь этого?

Вы можете использовать выражение Exists, как показано ниже:

Event.objects.filter(Exists(Invite.objects.filter(event=OuterRef('pk'))))

Это даст вам все события, отфильтрованные таким образом, что на событие должно ссылаться хотя бы одно приглашение.

OuterRef является частью подзапроса, делая ссылку на объект, который вы хотите сопоставить. Более подробно о подзапросах и exists можно узнать в документации

Попробуйте с:

Events.objects.filter(invite__guest = guest)

это выбирает список событий, в которых есть приглашение для данного гостя

Вернуться на верх