From cf5ac6819fdbad47ce7db88b6fa699d91ff48de5 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 16 Apr 2020 00:02:32 +0200 Subject: [PATCH] =?UTF-8?q?Smaz=C3=A1ny=20star=C3=A9=20a=20pomal=C3=A9=20v?= =?UTF-8?q?erze=20po=C4=8D=C3=ADt=C3=A1n=C3=AD=20bod=C5=AF=20odjak=C5=BEiv?= =?UTF-8?q?a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/views_all.py | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 05c00cdb..f1462f5d 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -407,38 +407,6 @@ def hlavni_problemy_cisla(cislo): # vrátí slovník řešitel:body obsahující počty bodů zadaných řešitelů za daný ročník def body_resitelu_odjakziva(rocnik, resitele): - body_odjakziva = {} - -# for r in resitele: -# body_odjakziva[str(r.id)] = 0 -######################################################################### -# POZOR! Aktuálně počítá jen za posledních 10 let od zadaného ročníku # -######################################################################### -## # Body za posledních 10 let je dobrá aproximace pro naše potřeby (výsledkovka -## # s aktivními řešiteli) -## -## body_pred_roky = [] -## rok = rocnik.prvni_rok -## rocniky = Rocnik.objects.filter(prvni_rok__gt=rok-11) -## for roc in rocniky: -## body_pred_roky.append(body_resitelu_za_rocnik(roc, resitele)) -## -## for r in resitele: -## for i in range(0,10): -## body_odjakziva[str(r.id)] += body_pred_roky[i][str(r.id)] - - -# Nasledující řešení je sice správné, ale moc pomalé: -# (důsledek toho, že dotazy na joinování databázových tabulek jsou kvadratické) -# for res in Reseni.objects.prefetch_related('resitele', 'hodnoceni_set').all(): -# for r in res.resitele.all(): -# # daný řešitel nemusí být v naší podmnožině -# if r not in resitele: continue -# -# for hodn in res.hodnoceni_set.all(): -# pricti_body(body_odjakziva, r, hodn.body) - -# Zkusíme agregovat: # Následující řádek přidá ke každému řešiteli údaj ".body" se součtem jejich bodů resitele_s_body = Resitel.objects.annotate(body=Sum('reseni__hodnoceni__body')) # Teď jen z QuerySetu řešitelů anotovaných body vygenerujeme slovník indexovaný řešitelským id obsahující body