From 8abe5f1f211793713af92178f0347232d81765af Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?=
 <benjamin.haettasch@fachschaft.informatik.tu-darmstadt.de>
Date: Tue, 27 Sep 2022 14:37:52 +0200
Subject: [PATCH] Speedup special attention ak admin view

Use annotations to query counts of owners, slots and availabilities directly in main query
---
 AKScheduling/views.py | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/AKScheduling/views.py b/AKScheduling/views.py
index 1332060a..381c0a1e 100644
--- a/AKScheduling/views.py
+++ b/AKScheduling/views.py
@@ -1,5 +1,6 @@
 from django.contrib import messages
 from django.contrib.messages.views import SuccessMessageMixin
+from django.db.models import Count
 from django.urls import reverse_lazy
 from django.utils.translation import gettext_lazy as _
 from django.views.generic import ListView, DetailView, UpdateView
@@ -73,7 +74,7 @@ class SpecialAttentionAKsAdminView(AdminViewMixin, DetailView):
         context = super().get_context_data(**kwargs)
         context["title"] = f"{_('AKs requiring special attention for')} {context['event']}"
 
-        aks = AK.objects.filter(event=context["event"])
+        aks = AK.objects.filter(event=context["event"]).annotate(Count('owners', distinct=True)).annotate(Count('akslot', distinct=True)).annotate(Count('availabilities', distinct=True))
         aks_with_comment = []
         ak_wishes_with_slots = []
         aks_without_availabilities = []
@@ -83,13 +84,13 @@ class SpecialAttentionAKsAdminView(AdminViewMixin, DetailView):
             if ak.notes != "":
                 aks_with_comment.append(ak)
 
-            if ak.wish:
-                if ak.akslot_set.count() > 0:
+            if ak.owners__count == 0:
+                if ak.akslot__count > 0:
                     ak_wishes_with_slots.append(ak)
             else:
-                if ak.akslot_set.count() == 0:
+                if ak.akslot__count == 0:
                     aks_without_slots.append(ak)
-                if ak.availabilities.count() == 0:
+                if ak.availabilities__count == 0:
                     aks_without_availabilities.append(ak)
 
         context["aks_with_comment"] = aks_with_comment
-- 
GitLab