Body odjakživa teď počítá databáze
This commit is contained in:
parent
e402f6c386
commit
5958262240
1 changed files with 25 additions and 21 deletions
|
@ -409,34 +409,38 @@ def hlavni_problemy_cisla(cislo):
|
||||||
def body_resitelu_odjakziva(rocnik, resitele):
|
def body_resitelu_odjakziva(rocnik, resitele):
|
||||||
body_odjakziva = {}
|
body_odjakziva = {}
|
||||||
|
|
||||||
for r in resitele:
|
# for r in resitele:
|
||||||
body_odjakziva[r.id] = 0
|
# body_odjakziva[str(r.id)] = 0
|
||||||
#########################################################################
|
#########################################################################
|
||||||
# POZOR! Aktuálně počítá jen za posledních 10 let od zadaného ročníku #
|
# 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
|
## # Body za posledních 10 let je dobrá aproximace pro naše potřeby (výsledkovka
|
||||||
# s aktivními řešiteli)
|
## # s aktivními řešiteli)
|
||||||
|
##
|
||||||
#body_pred_roky = []
|
## body_pred_roky = []
|
||||||
#rok = rocnik.prvni_rok
|
## rok = rocnik.prvni_rok
|
||||||
#rocniky = Rocnik.objects.filter(prvni_rok__gt=rok-11)
|
## rocniky = Rocnik.objects.filter(prvni_rok__gt=rok-11)
|
||||||
#for roc in rocniky:
|
## for roc in rocniky:
|
||||||
# body_pred_roky.append(body_resitelu_za_rocnik(roc, resitele))
|
## body_pred_roky.append(body_resitelu_za_rocnik(roc, resitele))
|
||||||
#
|
##
|
||||||
#for r in resitele:
|
## for r in resitele:
|
||||||
# for i in range(0,10):
|
## for i in range(0,10):
|
||||||
# body_odjakziva[r.id] += body_pred_roky[i][r.id]
|
## body_odjakziva[str(r.id)] += body_pred_roky[i][str(r.id)]
|
||||||
|
|
||||||
|
|
||||||
# Nasledující řešení je sice správné, ale moc pomalé:
|
# 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é)
|
# (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 res in Reseni.objects.prefetch_related('resitele', 'hodnoceni_set').all():
|
||||||
for r in res.resitele.all():
|
# for r in res.resitele.all():
|
||||||
# daný řešitel nemusí být v naší podmnožině
|
# # daný řešitel nemusí být v naší podmnožině
|
||||||
if r not in resitele: continue
|
# if r not in resitele: continue
|
||||||
|
#
|
||||||
for hodn in res.hodnoceni_set.all():
|
# for hodn in res.hodnoceni_set.all():
|
||||||
pricti_body(body_odjakziva, r, hodn.body)
|
# pricti_body(body_odjakziva, r, hodn.body)
|
||||||
|
|
||||||
|
# Zkusíme agregovat:
|
||||||
|
resitele_s_body = Resitel.objects.annotate(body=Sum('reseni__hodnoceni__body'))
|
||||||
|
body_odjakziva = {int(res.id) : res.body for res in resitele_s_body if res in resitele}
|
||||||
return body_odjakziva
|
return body_odjakziva
|
||||||
|
|
||||||
# vrátí slovník řešitel:body obsahující počty bodů zadaných řešitelů za daný ročník
|
# vrátí slovník řešitel:body obsahující počty bodů zadaných řešitelů za daný ročník
|
||||||
|
|
Loading…
Reference in a new issue