diff --git a/src/pretix/base/services/quotas.py b/src/pretix/base/services/quotas.py index 98102b94d..4511309e7 100644 --- a/src/pretix/base/services/quotas.py +++ b/src/pretix/base/services/quotas.py @@ -29,6 +29,7 @@ from django.conf import settings from django.db import models from django.db.models import ( Case, Count, F, Func, Max, OuterRef, Q, Subquery, Sum, Value, When, + prefetch_related_objects, ) from django.utils.timezone import now @@ -446,6 +447,7 @@ class QuotaAvailability: self.results[q] = Quota.AVAILABILITY_RESERVED, 0 def _compute_waitinglist(self, quotas, q_items, q_vars, size_left): + prefetch_related_objects(quotas, "event", "event__organizer") quotas = [ q for q in quotas if not q.event.settings.waiting_list_auto_disable or q.event.settings.waiting_list_auto_disable.datetime(q.subevent or q.event) > now() diff --git a/src/pretix/presale/views/organizer.py b/src/pretix/presale/views/organizer.py index 3bd5d6bdf..f389dff3f 100644 --- a/src/pretix/presale/views/organizer.py +++ b/src/pretix/presale/views/organizer.py @@ -561,6 +561,13 @@ def add_subevents_for_days(qs, before, after, ebd, timezones, event=None, cart_n for se in qs: if se.presale_is_running: quotas_to_compute += se.active_quotas + for q in se.active_quotas: + # save database lookups later + q.subevent = se + if event is not None: + q.event = event + else: + q.event = se.event qcache = {} if quotas_to_compute: @@ -572,6 +579,8 @@ def add_subevents_for_days(qs, before, after, ebd, timezones, event=None, cart_n for se in qs: if qcache: se._quota_cache = qcache + if event is not None: # save database lookup later + se.event = event kwargs = {'subevent': se.pk} if cart_namespace: kwargs['cart_namespace'] = cart_namespace