From 5ca3b11f321b7255ddd0fc4da32fd41770e7ebac Mon Sep 17 00:00:00 2001 From: Anet Date: Wed, 25 Mar 2020 21:01:36 +0100 Subject: [PATCH] =?UTF-8?q?V=C3=BDsledkovka=20=C4=8D=C3=ADsla=20funk=C4=8D?= =?UTF-8?q?n=C3=AD,=20ale=20pomal=C3=A1=20verze.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models.py | 8 ++++-- seminar/templates/seminar/archiv/cislo.html | 31 +++++++++++---------- seminar/views/views_all.py | 15 +++++----- 3 files changed, 30 insertions(+), 24 deletions(-) diff --git a/seminar/models.py b/seminar/models.py index 82b09944..83a9ea61 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -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) diff --git a/seminar/templates/seminar/archiv/cislo.html b/seminar/templates/seminar/archiv/cislo.html index 63788e06..d3cc50bb 100644 --- a/seminar/templates/seminar/archiv/cislo.html +++ b/seminar/templates/seminar/archiv/cislo.html @@ -1,7 +1,8 @@ {% extends "seminar/archiv/base_cisla.html" %} -{% block content %} -
+ {% block content %} +
+

{% block nadpis1a %}{% block nadpis1b %} Číslo {{ cislo }} @@ -45,14 +46,15 @@
  • Obálkování
  • - {% endif %} + {% endif %} {% if cislo.verejna_vysledkovka %} -

    Výsledkovka

    +

    Výsledkovka ({% now "jS F Y H:i" %})

    + {% else %} {% if user.is_staff %}
    -

    Výsledkovka (neveřejná)

    +

    Výsledkovka (neveřejná, {% now "jS F Y H:i:s" %})

    {% endif %} {% endif %} @@ -61,36 +63,37 @@ # Jméno - {# problémy by měly být veřejné, když je veřejná výsledkovka #} {% for p in problemy %} {{ p.kod_v_rocniku }} {% endfor %} Za číslo Za ročník - {#Odjakživa#} + Odjakživa {% for rv in radky_vysledkovky %} {% autoescape off %}{{ rv.poradi }}{% endautoescape %} - {% if rv.resitel.get_titul != "" %} - {{ rv.resitel.get_titul }}MM + {% if rv.titul is not '' %} + {{ rv.titul }}MM {% endif %} {{ rv.resitel.osoba.plne_jmeno }} - {% for b in rv.hlavni_problemy_body %} + {% for b in rv.body_problemy_sezn %} {{ b }} {% endfor %} {{ rv.body_cislo }} {{ rv.body_rocnik }} - {# {{ rv.body_celkem_odjakziva }}#} + {{ rv.body_celkem_odjakziva }} {% endfor %} - {% endif %} + {% endif %} {% if not cislo.verejna_vysledkovka and user.is_staff %}
    {% endif %} -
    -{% endblock content %} + Čas: {% now "jS F Y H:i:s" %} + + +{% endblock content %} diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 945d283e..39722e46 100644 --- a/seminar/views/views_all.py +++ b/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