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