Fix performance of check-in list API list

This commit is contained in:
Raphael Michel
2019-09-26 15:18:53 +02:00
parent f296f262e6
commit ce6e46dfd2
5 changed files with 50 additions and 144 deletions

View File

@@ -147,19 +147,9 @@ class CheckinListList(EventPermissionRequiredMixin, PaginationMixin, ListView):
ctx = super().get_context_data(**kwargs)
clists = list(ctx['checkinlists'])
# Optimization: Fetch expensive columns for this page only
annotations = {
a['pk']: a
for a in CheckinList.annotate_with_numbers(CheckinList.objects.filter(pk__in=[l.pk for l in clists]), self.request.event).values(
'pk', 'checkin_count', 'position_count', 'percent'
)
}
for cl in clists:
if cl.subevent:
cl.subevent.event = self.request.event # re-use same event object to make sure settings are cached
cl.checkin_count = annotations.get(cl.pk, {}).get('checkin_count', 0)
cl.position_count = annotations.get(cl.pk, {}).get('position_count', 0)
cl.percent = annotations.get(cl.pk, {}).get('percent', 0)
ctx['checkinlists'] = clists
return ctx

View File

@@ -23,7 +23,6 @@ from pretix.base.models import (
Item, Order, OrderPosition, OrderRefund, RequiredAction, SubEvent, Voucher,
WaitingListEntry,
)
from pretix.base.models.checkin import CheckinList
from pretix.base.timeline import timeline_for_event
from pretix.control.forms.event import CommentForm
from pretix.control.signals import (
@@ -227,8 +226,6 @@ def shop_state_widget(sender, **kwargs):
def checkin_widget(sender, subevent=None, lazy=False, **kwargs):
widgets = []
qs = sender.checkin_lists.filter(subevent=subevent)
if not lazy:
qs = CheckinList.annotate_with_numbers(qs, sender)
for cl in qs:
widgets.append({
'content': None if lazy else NUM_WIDGET.format(