Я думаю, что может быть очень трудно сделать то, что вы просите. Поскольку вы ищете список событий и используете общие отношения, ваша единственная ставка, вероятно, заключается в добавлении некоторого SQL через фильтр .extra (). Я не уверен, что даже знаю, какой SQL вам понадобится для этого, так как для этого, вероятно, потребуются предложения GROUP BY и HAVING.
В качестве альтернативы рассмотрите возможность добавления BooleanField к вашему объекту события с именем latest. Затем в методе сохранения вашего события напишите такой код:
def save(self, *args, **kwargs):
similar_events = Event.objects.filter(content_type=self.content_type,
object_id=self.object_id)
later_events = similar_events.filter(date__gt=self.date)
if later_events:
self.latest = False
else:
self.latest = True
similar_events.filter(date__lte=self.date).update(latest=False)
super(Event, self).save(*args, **kwargs)
Затем, чтобы получить список событий, просто сделайте это:
Event.objects.filter(latest=True)