Výsledkovka čísla funkční, ale pomalá verze.
This commit is contained in:
parent
4c4d384a74
commit
5ca3b11f32
3 changed files with 30 additions and 24 deletions
|
@ -304,9 +304,10 @@ class Resitel(SeminarModelBase):
|
|||
return sum(h.body for h in list(vsechna_hodnoceni))
|
||||
|
||||
|
||||
def get_titul(self):
|
||||
def get_titul(self, celkove_body=None):
|
||||
"Vrati titul"
|
||||
celkove_body = self.vsechny_body()
|
||||
if celkove_body is None:
|
||||
celkove_body = self.vsechny_body()
|
||||
|
||||
if celkove_body < 10:
|
||||
return ''
|
||||
|
@ -898,6 +899,9 @@ class Reseni(SeminarModelBase):
|
|||
# má OneToOneField s:
|
||||
# Konfera
|
||||
|
||||
# má ForeignKey s:
|
||||
# Hodnoceni
|
||||
|
||||
def __str__(self):
|
||||
return "{}({}): {}({})".format(self.resitele.first(),len(self.resitele.all()), self.problem.first() ,len(self.problem.all()))
|
||||
# NOTE: Potenciální DB HOG (bez select_related)
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
{% extends "seminar/archiv/base_cisla.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div>
|
||||
{% block content %}
|
||||
<div>
|
||||
|
||||
<h1>
|
||||
{% block nadpis1a %}{% block nadpis1b %}
|
||||
Číslo {{ cislo }}
|
||||
|
@ -45,14 +46,15 @@
|
|||
<li><a href="obalkovani">Obálkování</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if cislo.verejna_vysledkovka %}
|
||||
<h2>Výsledkovka</h2>
|
||||
<h2>Výsledkovka ({% now "jS F Y H:i" %})</h2>
|
||||
|
||||
{% else %}
|
||||
{% if user.is_staff %}
|
||||
<div class='mam-org-only'>
|
||||
<h2>Výsledkovka (neveřejná)</h2>
|
||||
<h2>Výsledkovka (neveřejná, {% now "jS F Y H:i:s" %})</h2>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
|
@ -61,36 +63,37 @@
|
|||
<tr class='border-b'>
|
||||
<th class='border-r'>#
|
||||
<th class='border-r'>Jméno
|
||||
{# problémy by měly být veřejné, když je veřejná výsledkovka #}
|
||||
{% for p in problemy %}
|
||||
<th class='border-r'><a href="{{ p.verejne_url }}">{{ p.kod_v_rocniku }}</a>
|
||||
{% endfor %}
|
||||
<th class='border-r'>Za číslo</sup>
|
||||
<th class='border-r'>Za ročník
|
||||
{#<th class='border-r'>Odjakživa#}
|
||||
<th class='border-r'>Odjakživa
|
||||
{% for rv in radky_vysledkovky %}
|
||||
<tr>
|
||||
<td class='border-r'>{% autoescape off %}{{ rv.poradi }}{% endautoescape %}
|
||||
<th class='border-r'>
|
||||
{% if rv.resitel.get_titul != "" %}
|
||||
{{ rv.resitel.get_titul }}<sup>MM</sup>
|
||||
{% if rv.titul is not '' %}
|
||||
{{ rv.titul }}<sup>MM</sup>
|
||||
{% endif %}
|
||||
{{ rv.resitel.osoba.plne_jmeno }}
|
||||
{% for b in rv.hlavni_problemy_body %}
|
||||
{% for b in rv.body_problemy_sezn %}
|
||||
<td class='border-r'>{{ b }}
|
||||
{% endfor %}
|
||||
<td class='border-r'>{{ rv.body_cislo }}
|
||||
<td class='border-r'><b>{{ rv.body_rocnik }}</b>
|
||||
{# <td class='border-r'>{{ rv.body_celkem_odjakziva }}#}
|
||||
<td class='border-r'>{{ rv.body_celkem_odjakziva }}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if not cislo.verejna_vysledkovka and user.is_staff %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
{% endblock content %}
|
||||
Čas: {% now "jS F Y H:i:s" %}
|
||||
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
||||
|
|
|
@ -476,12 +476,12 @@ def body_resitelu_odjakziva(rocnik, resitele):
|
|||
|
||||
|
||||
# Nasledující řešení je sice správné, ale moc pomalé:
|
||||
for res in Reseni.objects.prefetch_related('resitele', 'hodnoceni').all():
|
||||
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.all():
|
||||
for hodn in res.hodnoceni_set.all():
|
||||
pricti_body(body_odjakziva, r, hodn.body)
|
||||
return body_odjakziva
|
||||
|
||||
|
@ -493,10 +493,10 @@ def body_resitelu_za_rocnik(rocnik, aktivni_resitele):
|
|||
body_za_rocnik[str(ar.id)] = 0
|
||||
|
||||
# spočítáme body řešitelům přes všechna řešení s hodnocením v daném ročníku
|
||||
reseni = Reseni.objects.prefetch_related('resitele', 'hodnoceni').filter(hodnoceni__cislo_body__rocnik=rocnik)
|
||||
reseni = Reseni.objects.prefetch_related('resitele', 'hodnoceni_set').filter(hodnoceni__cislo_body__rocnik=rocnik)
|
||||
for res in reseni:
|
||||
for resitel in res.resitele.all():
|
||||
for hodn in res.hodnoceni.all():
|
||||
for hodn in res.hodnoceni_set.all():
|
||||
pricti_body(body_za_rocnik, resitel, hodn.body)
|
||||
return body_za_rocnik
|
||||
|
||||
|
@ -651,6 +651,7 @@ class RadekVysledkovky(object):
|
|||
self.body_celkem_odjakziva = body_odjakziva
|
||||
self.poradi = poradi
|
||||
self.body_problemy_sezn = body_problemy_sezn
|
||||
self.titul = resitel.get_titul(body_odjakziva)
|
||||
|
||||
|
||||
# přiřazuje danému řešiteli body do slovníku
|
||||
|
@ -713,7 +714,7 @@ class CisloView(generic.DetailView):
|
|||
slovnik[str(ar.id)] = ""
|
||||
|
||||
# vezmeme všechna řešení s body do daného čísla
|
||||
reseni_do_cisla = Reseni.objects.prefetch_related('problem', 'hodnoceni', 'resitele').filter(hodnoceni__cislo_body=cislo)
|
||||
reseni_do_cisla = Reseni.objects.prefetch_related('problem', 'resitele', 'hodnoceni_set').filter(hodnoceni__cislo_body=cislo)
|
||||
|
||||
# projdeme všechna řešení do čísla a přičteme body každému řešiteli do celkových
|
||||
# bodů i do bodů za problém
|
||||
|
@ -725,7 +726,7 @@ class CisloView(generic.DetailView):
|
|||
nadproblem_slovnik = hlavni_problemy_slovnik[str(nadproblem.id)]
|
||||
|
||||
# a více hodnocení
|
||||
for hodn in list(reseni.hodnoceni.all()):
|
||||
for hodn in list(reseni.hodnoceni_set.all()):
|
||||
body = hodn.body
|
||||
|
||||
# a více řešitelů
|
||||
|
@ -780,8 +781,6 @@ class CisloView(generic.DetailView):
|
|||
context['problemy'] = hlavni_problemy
|
||||
# context['v_cisle_zadane'] = TODO
|
||||
# context['resene_problemy'] = resene_problemy
|
||||
#XXX nefungují body odjakživa - asi typový problém
|
||||
#XXX nefungují tituly - možná korelace s výše uvedeným problémem
|
||||
print("Předávám kontext.")
|
||||
return context
|
||||
|
||||
|
|
Loading…
Reference in a new issue