Nezobrazuj výsledky u ročníku, pokud žádné nejsou
jinak byl index out of range
This commit is contained in:
parent
b080636baa
commit
65e306f316
2 changed files with 91 additions and 87 deletions
|
@ -12,34 +12,36 @@
|
|||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
<h3>Výsledkovka</h3>
|
||||
<table class='vysledkovka'>
|
||||
<tr class='border-b'>
|
||||
<th class='border-r'>#
|
||||
<th class='border-r'>Jméno
|
||||
<th class='border-r'>R.
|
||||
<th class='border-r'>Odjakživa
|
||||
{% for c in rocnik.verejna_cisla %}
|
||||
{% if c.verejna_vysledkovka %}
|
||||
<th class='border-r'><a href="{{ c.verejne_url }}">
|
||||
{{c.rocnik.rocnik}}.{{ c.cislo }}</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<th class='border-r'>Celkem
|
||||
{% if vysledkovka %}
|
||||
<h3>Výsledkovka</h3>
|
||||
<table class='vysledkovka'>
|
||||
<tr class='border-b'>
|
||||
<th class='border-r'>#
|
||||
<th class='border-r'>Jméno
|
||||
<th class='border-r'>R.
|
||||
<th class='border-r'>Odjakživa
|
||||
{% for c in rocnik.verejna_cisla %}
|
||||
{% if c.verejna_vysledkovka %}
|
||||
<th class='border-r'><a href="{{ c.verejne_url }}">
|
||||
{{c.rocnik.rocnik}}.{{ c.cislo }}</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<th class='border-r'>Celkem
|
||||
|
||||
{% for rv in vysledkovka %}
|
||||
<tr>
|
||||
<td class='border-r'>{{ rv.poradi }}
|
||||
<th class='border-r'> {{ rv.resitel.titul }} <sup>MM</sup> {{ rv.resitel.plne_jmeno }}
|
||||
<td class='border-r'>{{ rv.resitel.rocnik }}
|
||||
<td class='border-r'>{{ rv.body_odjakziva }}
|
||||
{% for b in rv.body %}
|
||||
<td class='border-r'>{{ b }}
|
||||
{% endfor %}
|
||||
<td class='border-r'><b>{{ rv.body_rocnik }}</b>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% for rv in vysledkovka %}
|
||||
<tr>
|
||||
<td class='border-r'>{{ rv.poradi }}
|
||||
<th class='border-r'> {{ rv.resitel.titul }} <sup>MM</sup> {{ rv.resitel.plne_jmeno }}
|
||||
<td class='border-r'>{{ rv.resitel.rocnik }}
|
||||
<td class='border-r'>{{ rv.body_odjakziva }}
|
||||
{% for b in rv.body %}
|
||||
<td class='border-r'>{{ b }}
|
||||
{% endfor %}
|
||||
<td class='border-r'><b>{{ rv.body_rocnik }}</b>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
|
122
seminar/views.py
122
seminar/views.py
|
@ -87,69 +87,71 @@ class RocnikView(generic.DetailView):
|
|||
|
||||
cisla_v_rocniku = VysledkyKCisluZaRocnik.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).order_by('-cislo')
|
||||
#vyberu vsechny verejne vysledky z rocniku
|
||||
vysledky = cisla_v_rocniku.filter(cislo = cisla_v_rocniku[0].cislo).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno').select_related('resitel')
|
||||
#vybere vsechny vysledky z posledniho verejneho cisla a setridi sestupne dle bodu
|
||||
vysledky_resitele = {}
|
||||
stejne_body = {}
|
||||
konec_rozmezi = {}
|
||||
vysledkovka = []
|
||||
posledni_body = 100000
|
||||
predchozi_poradi = None
|
||||
body_minule = None
|
||||
#pokud žádné nejsou, výsledkovka se nezobrazí
|
||||
if cisla_v_rocniku:
|
||||
vysledky = cisla_v_rocniku.filter(cislo = cisla_v_rocniku[0].cislo).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno').select_related('resitel')
|
||||
#vybere vsechny vysledky z posledniho verejneho cisla a setridi sestupne dle bodu
|
||||
vysledky_resitele = {}
|
||||
stejne_body = {}
|
||||
konec_rozmezi = {}
|
||||
vysledkovka = []
|
||||
posledni_body = 100000
|
||||
predchozi_poradi = None
|
||||
body_minule = None
|
||||
|
||||
for vi in range(len(vysledky)):
|
||||
v = vysledky[vi]
|
||||
rv = RadekVysledkovky()
|
||||
rv.resitel = v.resitel
|
||||
verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).filter(cislo = cisla_v_rocniku[0].cislo)
|
||||
rv.body_odjakziva = verejne_vysl_odjakziva.filter(resitel = rv.resitel)[0].body
|
||||
rv.resitel.titul = rv.resitel.get_titul(rv.body_odjakziva)
|
||||
rv.resitel.rocnik = rv.resitel.rocnik(context['rocnik'])
|
||||
rv.body = []*len(context['rocnik'].verejna_cisla())
|
||||
#pokud pro dany rok a cislo nema resitel vysledky, ma defaultne 0
|
||||
for cis in context['rocnik'].verejna_cisla():
|
||||
if cis.verejna_vysledkovka:
|
||||
print cis
|
||||
body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik = context['rocnik']).filter(cislo = cis).filter(resitel = rv.resitel)
|
||||
#seznam vysledku se spravnym rocnikem a cislem pro resitele
|
||||
#zobrazim jen je-li vysledkovka verejna
|
||||
if body_za_cislo:
|
||||
rv.body.append(body_za_cislo[0].body)
|
||||
#neprazdne vysledky by mely obsahovat prave jeden vysledek
|
||||
for vi in range(len(vysledky)):
|
||||
v = vysledky[vi]
|
||||
rv = RadekVysledkovky()
|
||||
rv.resitel = v.resitel
|
||||
verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).filter(cislo = cisla_v_rocniku[0].cislo)
|
||||
rv.body_odjakziva = verejne_vysl_odjakziva.filter(resitel = rv.resitel)[0].body
|
||||
rv.resitel.titul = rv.resitel.get_titul(rv.body_odjakziva)
|
||||
rv.resitel.rocnik = rv.resitel.rocnik(context['rocnik'])
|
||||
rv.body = []*len(context['rocnik'].verejna_cisla())
|
||||
#pokud pro dany rok a cislo nema resitel vysledky, ma defaultne 0
|
||||
for cis in context['rocnik'].verejna_cisla():
|
||||
if cis.verejna_vysledkovka:
|
||||
print cis
|
||||
body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik = context['rocnik']).filter(cislo = cis).filter(resitel = rv.resitel)
|
||||
#seznam vysledku se spravnym rocnikem a cislem pro resitele
|
||||
#zobrazim jen je-li vysledkovka verejna
|
||||
if body_za_cislo:
|
||||
rv.body.append(body_za_cislo[0].body)
|
||||
#neprazdne vysledky by mely obsahovat prave jeden vysledek
|
||||
else:
|
||||
rv.body.append(0)
|
||||
#resitel nema za cislo body
|
||||
rv.poradi = ''
|
||||
#defaultni poradi je prazdne - kvuli sdilenym mistum
|
||||
rv.body_rocnik = v.body
|
||||
rv.body_na_zacatku = rv.body_odjakziva - rv.body_rocnik
|
||||
#body za minule rocniky
|
||||
if posledni_body > v.body:
|
||||
if stejne_body.get(posledni_body):
|
||||
#pokud uz jsme predtim narazili na stejny pocet bodu
|
||||
konec_rozmezi[posledni_body] = int(predchozi_poradi.poradi) + stejne_body[posledni_body]
|
||||
#druha hranice sdilenych pozic - zacatek + pocet lidi se stejnymi body
|
||||
predchozi_poradi.poradi = '{0}. -- {1}.'.format(predchozi_poradi.poradi,konec_rozmezi[posledni_body])
|
||||
#predchozi radek ktery menil pocty bodu bude mit rozsah, pokud bylo vice radku se stejnym poctem bodu
|
||||
elif predchozi_poradi :
|
||||
predchozi_poradi.poradi = '{0}.'.format(predchozi_poradi.poradi)
|
||||
#pokud nebyl rozsah hodnot, vypisu, pridam tecku za cislo
|
||||
posledni_body = v.body
|
||||
rv.poradi = vi + 1
|
||||
#poradi se meni jen u resitele s rozdilnym poctem bodu nez mel minuly
|
||||
predchozi_poradi = rv
|
||||
elif posledni_body == v.body:
|
||||
if not stejne_body.get(v.body):
|
||||
stejne_body[v.body] = 1
|
||||
#pokud klic neexistuje, zalozim novy pro tohoto resitele
|
||||
else:
|
||||
rv.body.append(0)
|
||||
#resitel nema za cislo body
|
||||
rv.poradi = ''
|
||||
#defaultni poradi je prazdne - kvuli sdilenym mistum
|
||||
rv.body_rocnik = v.body
|
||||
rv.body_na_zacatku = rv.body_odjakziva - rv.body_rocnik
|
||||
#body za minule rocniky
|
||||
if posledni_body > v.body:
|
||||
if stejne_body.get(posledni_body):
|
||||
#pokud uz jsme predtim narazili na stejny pocet bodu
|
||||
konec_rozmezi[posledni_body] = int(predchozi_poradi.poradi) + stejne_body[posledni_body]
|
||||
#druha hranice sdilenych pozic - zacatek + pocet lidi se stejnymi body
|
||||
predchozi_poradi.poradi = '{0}. -- {1}.'.format(predchozi_poradi.poradi,konec_rozmezi[posledni_body])
|
||||
#predchozi radek ktery menil pocty bodu bude mit rozsah, pokud bylo vice radku se stejnym poctem bodu
|
||||
elif predchozi_poradi :
|
||||
predchozi_poradi.poradi = '{0}.'.format(predchozi_poradi.poradi)
|
||||
#pokud nebyl rozsah hodnot, vypisu, pridam tecku za cislo
|
||||
posledni_body = v.body
|
||||
rv.poradi = vi + 1
|
||||
#poradi se meni jen u resitele s rozdilnym poctem bodu nez mel minuly
|
||||
predchozi_poradi = rv
|
||||
elif posledni_body == v.body:
|
||||
if not stejne_body.get(v.body):
|
||||
stejne_body[v.body] = 1
|
||||
#pokud klic neexistuje, zalozim novy pro tohoto resitele
|
||||
else:
|
||||
stejne_body[v.body] += 1
|
||||
#rozsirim pocet resitelu sdilejici stejnou pozici
|
||||
vysledky_resitele[v.resitel.id] = rv
|
||||
#odkaz na radek vysledkovky patrici danemu resiteli
|
||||
vysledkovka.append(rv)
|
||||
stejne_body[v.body] += 1
|
||||
#rozsirim pocet resitelu sdilejici stejnou pozici
|
||||
vysledky_resitele[v.resitel.id] = rv
|
||||
#odkaz na radek vysledkovky patrici danemu resiteli
|
||||
vysledkovka.append(rv)
|
||||
|
||||
context['vysledkovka'] = vysledkovka
|
||||
context['vysledkovka'] = vysledkovka
|
||||
return context
|
||||
|
||||
class ProblemView(generic.DetailView):
|
||||
|
|
Loading…
Reference in a new issue