|
@ -35,15 +35,22 @@ class TabulkaOdevzdanychReseniView(ListView): |
|
|
template_name = 'seminar/odevzdavatko/tabulka.html' |
|
|
template_name = 'seminar/odevzdavatko/tabulka.html' |
|
|
model = m.Hodnoceni |
|
|
model = m.Hodnoceni |
|
|
|
|
|
|
|
|
|
|
|
def inicializuj_osy_tabulky(self): |
|
|
|
|
|
"""Vyrobí prvotní querysety pro sloupce a řádky, tj. seznam všech řešitelů a problémů""" |
|
|
|
|
|
# NOTE: Tenhle blok nemůže být přímo ve třídě, protože před vyrobením databáze neexistují ty objekty (?). TODO: Otestovat |
|
|
|
|
|
# TODO: Prefetches, Select related, ... |
|
|
|
|
|
self.resitele = m.Resitel.objects.all() |
|
|
|
|
|
self.problemy = m.Problem.objects.all() |
|
|
|
|
|
|
|
|
def get_queryset(self): |
|
|
def get_queryset(self): |
|
|
# FIXME: Tenhle blok nemůže být přímo ve třídě, protože před vyrobením databáze neexistuje Nastavení. |
|
|
self.inicializuj_osy_tabulky() |
|
|
self.akt_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci, asi... |
|
|
self.akt_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci, asi... |
|
|
self.resitele = resi_v_rocniku(self.akt_rocnik) |
|
|
self.resitele = resi_v_rocniku(self.akt_rocnik) |
|
|
# NOTE: Protože řešení odkazuje přímo na Problém a QuerySet na Hodnocení je nepolymorfní, musíme porovnávat taky s nepolymorfními Problémy. |
|
|
# NOTE: Protože řešení odkazuje přímo na Problém a QuerySet na Hodnocení je nepolymorfní, musíme porovnávat taky s nepolymorfními Problémy. |
|
|
self.zadane_problemy = m.Problem.objects.filter(stav=m.Problem.STAV_ZADANY).non_polymorphic() |
|
|
self.problemy = m.Problem.objects.filter(stav=m.Problem.STAV_ZADANY).non_polymorphic() |
|
|
|
|
|
|
|
|
qs = super().get_queryset() |
|
|
qs = super().get_queryset() |
|
|
qs = qs.filter(problem__in=self.zadane_problemy).select_related('reseni', 'problem').prefetch_related('reseni__resitele__osoba') |
|
|
qs = qs.filter(problem__in=self.problemy).select_related('reseni', 'problem').prefetch_related('reseni__resitele__osoba') |
|
|
return qs |
|
|
return qs |
|
|
|
|
|
|
|
|
def get_context_data(self, *args, **kwargs): |
|
|
def get_context_data(self, *args, **kwargs): |
|
@ -51,10 +58,10 @@ class TabulkaOdevzdanychReseniView(ListView): |
|
|
self.akt_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci, asi... |
|
|
self.akt_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci, asi... |
|
|
self.resitele = resi_v_rocniku(self.akt_rocnik) |
|
|
self.resitele = resi_v_rocniku(self.akt_rocnik) |
|
|
# NOTE: Protože řešení odkazuje přímo na Problém a QuerySet na Hodnocení je nepolymorfní, musíme porovnávat taky s nepolymorfními Problémy. |
|
|
# NOTE: Protože řešení odkazuje přímo na Problém a QuerySet na Hodnocení je nepolymorfní, musíme porovnávat taky s nepolymorfními Problémy. |
|
|
self.zadane_problemy = m.Problem.objects.filter(stav=m.Problem.STAV_ZADANY).non_polymorphic() |
|
|
self.problemy = m.Problem.objects.filter(stav=m.Problem.STAV_ZADANY).non_polymorphic() |
|
|
|
|
|
|
|
|
ctx = super().get_context_data(*args, **kwargs) |
|
|
ctx = super().get_context_data(*args, **kwargs) |
|
|
ctx['problemy'] = self.zadane_problemy |
|
|
ctx['problemy'] = self.problemy |
|
|
ctx['resitele'] = self.resitele |
|
|
ctx['resitele'] = self.resitele |
|
|
tabulka = dict() |
|
|
tabulka = dict() |
|
|
|
|
|
|
|
@ -81,7 +88,7 @@ class TabulkaOdevzdanychReseniView(ListView): |
|
|
hodnoty = [] |
|
|
hodnoty = [] |
|
|
for resitel in self.resitele: |
|
|
for resitel in self.resitele: |
|
|
resiteluv_radek = [] |
|
|
resiteluv_radek = [] |
|
|
for problem in self.zadane_problemy: |
|
|
for problem in self.problemy: |
|
|
if problem in tabulka and resitel in tabulka[problem]: |
|
|
if problem in tabulka and resitel in tabulka[problem]: |
|
|
resiteluv_radek.append(tabulka[problem][resitel]) |
|
|
resiteluv_radek.append(tabulka[problem][resitel]) |
|
|
else: |
|
|
else: |
|
|