Úprava kódu k dodělání filtrovatelné tabulky
This commit is contained in:
parent
3e249aef5e
commit
cc50f459a7
1 changed files with 13 additions and 6 deletions
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue