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