From 301191e4bd145bda39c1f82e7e9ab5a920c2bda7 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 6 Oct 2025 09:24:51 +0200 Subject: [PATCH] Notification queues: Optimize order for less queries (#5512) * Notification queues: Optimize order for less queries * Update src/pretix/api/webhooks.py Co-authored-by: luelista --------- Co-authored-by: luelista --- src/pretix/api/webhooks.py | 10 +++++++--- src/pretix/base/services/notifications.py | 6 +++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/pretix/api/webhooks.py b/src/pretix/api/webhooks.py index 2dcf525e9e..2505a5a0dc 100644 --- a/src/pretix/api/webhooks.py +++ b/src/pretix/api/webhooks.py @@ -439,8 +439,12 @@ def register_default_webhook_events(sender, **kwargs): def notify_webhooks(logentry_ids: list): if not isinstance(logentry_ids, list): logentry_ids = [logentry_ids] - qs = LogEntry.all.select_related('event', 'event__organizer', 'organizer').filter(id__in=logentry_ids) - _org, _at, webhooks = None, None, None + qs = LogEntry.all.select_related( + 'event', 'event__organizer', 'organizer' + ).order_by( + 'action_type', 'organizer_id', 'event_id', + ).filter(id__in=logentry_ids) + _org, _at, _ev, webhooks = None, None, None, None for logentry in qs: if not logentry.organizer: break # We need to know the organizer @@ -450,7 +454,7 @@ def notify_webhooks(logentry_ids: list): if not notification_type: break # Ignore, no webhooks for this event type - if _org != logentry.organizer or _at != logentry.action_type or webhooks is None: + if _org != logentry.organizer or _at != logentry.action_type or _ev != logentry.event_id or webhooks is None: _org = logentry.organizer _at = logentry.action_type diff --git a/src/pretix/base/services/notifications.py b/src/pretix/base/services/notifications.py index 0680482f20..310252012d 100644 --- a/src/pretix/base/services/notifications.py +++ b/src/pretix/base/services/notifications.py @@ -41,7 +41,11 @@ def notify(logentry_ids: list): if not isinstance(logentry_ids, list): logentry_ids = [logentry_ids] - qs = LogEntry.all.select_related('event', 'event__organizer').filter(id__in=logentry_ids) + qs = LogEntry.all.select_related( + 'event', 'event__organizer' + ).order_by( + 'action_type', 'event_id', + ).filter(id__in=logentry_ids) _event, _at, notify_specific, notify_global = None, None, None, None for logentry in qs: