Django self join с использованием ForeignKey (ORM)

У меня есть Event Модель:

class Event(models.Model):
    message = models.CharField(max_length=128)
    timestamp = models.DateTimeField()
    cancels_event = models.ForeignKey('self', on_delete=models.CASCADE) 

Я анализирую множество сообщений о событиях, но сначала мне нужно проверить, не было ли событие отменено.

Допустим, я получаю Event_1, затем я получаю Event_2 с Event_2.cancels_event=Event_1, поэтому Event_2 отменяет Event_1.

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

В SQL я бы использовал соединение с self:

SELECT * FROM Event e1
JOIN Event e2
ON e1.id = e2.cancels_event

Но я не знаю, как это сделать в рамках Django ORM.

Этот код не использует join, но работает.

canceled_list= Event.objects.all().values_list('cancels_event')

result = Event.objects.filter(pk__in = canceled_list)

Вы можете фильтровать с помощью:

Event.objects.filter(
    event__isnull=False
)

или если вы хотите предотвратить возвращение одного и того же Event несколько раз, вы можете добавить .distinct():

Event.objects.filter(
    event__isnull=False
).distinct()
Вернуться на верх