mirror of
https://github.com/pretix/pretix.git
synced 2026-05-08 15:44:02 +00:00
Fix N+1 query in event calendar found by sentry (#4104)
* Fix N+1 query in event calendar found by sentry * isort --------- Co-authored-by: Mira Weller <weller@rami.io>
This commit is contained in:
@@ -29,6 +29,7 @@ from django.conf import settings
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import (
|
from django.db.models import (
|
||||||
Case, Count, F, Func, Max, OuterRef, Q, Subquery, Sum, Value, When,
|
Case, Count, F, Func, Max, OuterRef, Q, Subquery, Sum, Value, When,
|
||||||
|
prefetch_related_objects,
|
||||||
)
|
)
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
|
||||||
@@ -446,6 +447,7 @@ class QuotaAvailability:
|
|||||||
self.results[q] = Quota.AVAILABILITY_RESERVED, 0
|
self.results[q] = Quota.AVAILABILITY_RESERVED, 0
|
||||||
|
|
||||||
def _compute_waitinglist(self, quotas, q_items, q_vars, size_left):
|
def _compute_waitinglist(self, quotas, q_items, q_vars, size_left):
|
||||||
|
prefetch_related_objects(quotas, "event", "event__organizer")
|
||||||
quotas = [
|
quotas = [
|
||||||
q for q in 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()
|
if not q.event.settings.waiting_list_auto_disable or q.event.settings.waiting_list_auto_disable.datetime(q.subevent or q.event) > now()
|
||||||
|
|||||||
@@ -561,6 +561,13 @@ def add_subevents_for_days(qs, before, after, ebd, timezones, event=None, cart_n
|
|||||||
for se in qs:
|
for se in qs:
|
||||||
if se.presale_is_running:
|
if se.presale_is_running:
|
||||||
quotas_to_compute += se.active_quotas
|
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 = {}
|
qcache = {}
|
||||||
if quotas_to_compute:
|
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:
|
for se in qs:
|
||||||
if qcache:
|
if qcache:
|
||||||
se._quota_cache = qcache
|
se._quota_cache = qcache
|
||||||
|
if event is not None: # save database lookup later
|
||||||
|
se.event = event
|
||||||
kwargs = {'subevent': se.pk}
|
kwargs = {'subevent': se.pk}
|
||||||
if cart_namespace:
|
if cart_namespace:
|
||||||
kwargs['cart_namespace'] = cart_namespace
|
kwargs['cart_namespace'] = cart_namespace
|
||||||
|
|||||||
Reference in New Issue
Block a user