Browse Source

Výsledkovka čísla funkční, ale pomalá verze.

export_seznamu_prednasek
Anet 5 years ago
parent
commit
5ca3b11f32
  1. 6
      seminar/models.py
  2. 23
      seminar/templates/seminar/archiv/cislo.html
  3. 15
      seminar/views/views_all.py

6
seminar/models.py

@ -304,8 +304,9 @@ 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"
if celkove_body is None:
celkove_body = self.vsechny_body()
if celkove_body < 10:
@ -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)

23
seminar/templates/seminar/archiv/cislo.html

@ -1,7 +1,8 @@
{% extends "seminar/archiv/base_cisla.html" %}
{% block content %}
<div>
{% block content %}
<div>
<h1>
{% block nadpis1a %}{% block nadpis1b %}
Číslo {{ cislo }}
@ -48,11 +49,12 @@
{% 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,27 +63,26 @@
<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>
@ -91,6 +92,8 @@
</div>
{% endif %}
Čas: {% now "jS F Y H:i:s" %}
</div>
{% endblock content %}

15
seminar/views/views_all.py

@ -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…
Cancel
Save