Browse Source

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

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

8
seminar/models.py

@ -304,9 +304,10 @@ class Resitel(SeminarModelBase):
return sum(h.body for h in list(vsechna_hodnoceni)) return sum(h.body for h in list(vsechna_hodnoceni))
def get_titul(self): def get_titul(self, celkove_body=None):
"Vrati titul" "Vrati titul"
celkove_body = self.vsechny_body() if celkove_body is None:
celkove_body = self.vsechny_body()
if celkove_body < 10: if celkove_body < 10:
return '' return ''
@ -898,6 +899,9 @@ class Reseni(SeminarModelBase):
# má OneToOneField s: # má OneToOneField s:
# Konfera # Konfera
# má ForeignKey s:
# Hodnoceni
def __str__(self): def __str__(self):
return "{}({}): {}({})".format(self.resitele.first(),len(self.resitele.all()), self.problem.first() ,len(self.problem.all())) return "{}({}): {}({})".format(self.resitele.first(),len(self.resitele.all()), self.problem.first() ,len(self.problem.all()))
# NOTE: Potenciální DB HOG (bez select_related) # 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" %} {% extends "seminar/archiv/base_cisla.html" %}
{% block content %} {% block content %}
<div> <div>
<h1> <h1>
{% block nadpis1a %}{% block nadpis1b %} {% block nadpis1a %}{% block nadpis1b %}
Číslo {{ cislo }} Číslo {{ cislo }}
@ -48,11 +49,12 @@
{% endif %} {% endif %}
{% if cislo.verejna_vysledkovka %} {% if cislo.verejna_vysledkovka %}
<h2>Výsledkovka</h2> <h2>Výsledkovka ({% now "jS F Y H:i" %})</h2>
{% else %} {% else %}
{% if user.is_staff %} {% if user.is_staff %}
<div class='mam-org-only'> <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 %}
{% endif %} {% endif %}
@ -61,27 +63,26 @@
<tr class='border-b'> <tr class='border-b'>
<th class='border-r'># <th class='border-r'>#
<th class='border-r'>Jméno <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 %} {% for p in problemy %}
<th class='border-r'><a href="{{ p.verejne_url }}">{{ p.kod_v_rocniku }}</a> <th class='border-r'><a href="{{ p.verejne_url }}">{{ p.kod_v_rocniku }}</a>
{% endfor %} {% endfor %}
<th class='border-r'>Za číslo</sup> <th class='border-r'>Za číslo</sup>
<th class='border-r'>Za ročník <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 %} {% for rv in radky_vysledkovky %}
<tr> <tr>
<td class='border-r'>{% autoescape off %}{{ rv.poradi }}{% endautoescape %} <td class='border-r'>{% autoescape off %}{{ rv.poradi }}{% endautoescape %}
<th class='border-r'> <th class='border-r'>
{% if rv.resitel.get_titul != "" %} {% if rv.titul is not '' %}
{{ rv.resitel.get_titul }}<sup>MM</sup> {{ rv.titul }}<sup>MM</sup>
{% endif %} {% endif %}
{{ rv.resitel.osoba.plne_jmeno }} {{ rv.resitel.osoba.plne_jmeno }}
{% for b in rv.hlavni_problemy_body %} {% for b in rv.body_problemy_sezn %}
<td class='border-r'>{{ b }} <td class='border-r'>{{ b }}
{% endfor %} {% endfor %}
<td class='border-r'>{{ rv.body_cislo }} <td class='border-r'>{{ rv.body_cislo }}
<td class='border-r'><b>{{ rv.body_rocnik }}</b> <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> </tr>
{% endfor %} {% endfor %}
</table> </table>
@ -91,6 +92,8 @@
</div> </div>
{% endif %} {% endif %}
Čas: {% now "jS F Y H:i:s" %}
</div> </div>
{% endblock content %} {% 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é: # 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(): 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.all(): for hodn in res.hodnoceni_set.all():
pricti_body(body_odjakziva, r, hodn.body) pricti_body(body_odjakziva, r, hodn.body)
return body_odjakziva return body_odjakziva
@ -493,10 +493,10 @@ def body_resitelu_za_rocnik(rocnik, aktivni_resitele):
body_za_rocnik[str(ar.id)] = 0 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 # 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 res in reseni:
for resitel in res.resitele.all(): 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) pricti_body(body_za_rocnik, resitel, hodn.body)
return body_za_rocnik return body_za_rocnik
@ -651,6 +651,7 @@ class RadekVysledkovky(object):
self.body_celkem_odjakziva = body_odjakziva self.body_celkem_odjakziva = body_odjakziva
self.poradi = poradi self.poradi = poradi
self.body_problemy_sezn = body_problemy_sezn 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 # přiřazuje danému řešiteli body do slovníku
@ -713,7 +714,7 @@ class CisloView(generic.DetailView):
slovnik[str(ar.id)] = "" slovnik[str(ar.id)] = ""
# vezmeme všechna řešení s body do daného čísla # 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 # 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 # bodů i do bodů za problém
@ -725,7 +726,7 @@ class CisloView(generic.DetailView):
nadproblem_slovnik = hlavni_problemy_slovnik[str(nadproblem.id)] nadproblem_slovnik = hlavni_problemy_slovnik[str(nadproblem.id)]
# a více hodnocení # a více hodnocení
for hodn in list(reseni.hodnoceni.all()): for hodn in list(reseni.hodnoceni_set.all()):
body = hodn.body body = hodn.body
# a více řešitelů # a více řešitelů
@ -780,8 +781,6 @@ class CisloView(generic.DetailView):
context['problemy'] = hlavni_problemy context['problemy'] = hlavni_problemy
# context['v_cisle_zadane'] = TODO # context['v_cisle_zadane'] = TODO
# context['resene_problemy'] = resene_problemy # 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.") print("Předávám kontext.")
return context return context

Loading…
Cancel
Save