Не существует собственного способа извлечения нескольких несвязанных моделей в одном QuerySet. Что вы можете сделать, это использовать наследование моделей, иметь базовую модель для всех моделей событий. Со следующей структурой модели:
class Event(models.Model):
timestamp = models.DateTimeField()
user = models.ForeignKey(User)
...
class WebhookSubscription(Event):
...
class WebhookEvent(Event):
...
class TokenRefresh(Event):
...
class LogEvent(Event):
...
Вы можете сделать запрос напрямую, используя модель события, как;
events = Event.objects.filter(user=user).order_by('timestamp')
Это даст вам экземпляры Event, которые не будут содержать данные для дочерних моделей. Вы можете получить дочерний экземпляр от родителя точно так же, как после OneToOneField (вот как фактически django моделирует наследование, создавая две таблицы и связывая их с внешним ключом):
event.webhooksubscription
event.webhookevent
event.tokenrefresh
event.logevent
Они будут возвращать экземпляры дочерней модели, если таковые существуют, и вызывают исключение ObjectNotFound , если у родителя нет связанного указанного экземпляра дочерней модели.
Этот подход позволит вам выполнять такие операции, как сортировка и нарезка на уровне базы данных, с обратной стороной дополнительной сложности модели (вам потребуется отдельный запрос для получения данных дочерней модели)