From e46d5a20c163c8f526bbc2e35bb3d8ce33c09d56 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Sun, 12 Sep 2021 02:20:06 +0200 Subject: [PATCH] =?UTF-8?q?Oprava=20odevzd=C3=A1vac=C3=AD=20tabulky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Chyběly správně inicializace ročníku --- seminar/forms.py | 4 ++-- seminar/views/odevzdavatko.py | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/seminar/forms.py b/seminar/forms.py index 8f46b6c8..47b7ade6 100644 --- a/seminar/forms.py +++ b/seminar/forms.py @@ -415,9 +415,9 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form): # choices jako parametr Select widgetu neumí brát callable, jen iterable, takže si pro jednoduchost můžu rovnou uložit výsledek sem... # A "sem" znamená do libovolné metody, protože jinak se jedná o kód, který django spustí při inicializaci a protože potřebujeme databázi, tak by spadnul při vyrábění testdat... self.terminy = self.gen_terminy(rocnik) - self.fields['reseni_od'].widget = forms.Select(choices=self.gen_terminy()) + self.fields['reseni_od'].widget = forms.Select(choices=self.gen_terminy(rocnik)) self.fields['reseni_od'].initial = self.terminy[-2] - self.fields['reseni_do'].widget = forms.Select(choices=self.gen_terminy()) + self.fields['reseni_do'].widget = forms.Select(choices=self.gen_terminy(rocnik)) self.fields['reseni_do'].initial = self.terminy[-1] # NOTE: Initial definuji pro jednotlivé fieldy, aby to bylo tady a nebylo potřeba to řešit ve views... diff --git a/seminar/views/odevzdavatko.py b/seminar/views/odevzdavatko.py index a8273ec8..8f22f0e0 100644 --- a/seminar/views/odevzdavatko.py +++ b/seminar/views/odevzdavatko.py @@ -53,11 +53,11 @@ class TabulkaOdevzdanychReseniView(ListView): self.problemy = m.Problem.objects.all() self.reseni = m.Reseni.objects.all() - aktualni_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci + self.aktualni_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci if 'rocnik' in self.kwargs: - aktualni_rocnik = m.Rocnik.objects.get(rocnik=self.kwargs['rocnik']) + self.aktualni_rocnik = m.Rocnik.objects.get(rocnik=self.kwargs['rocnik']) - form = FiltrForm(self.request.GET, rocnik=aktualni_rocnik) + form = FiltrForm(self.request.GET, rocnik=self.aktualni_rocnik) if form.is_valid(): fcd = form.cleaned_data resitele = fcd["resitele"] @@ -66,7 +66,7 @@ class TabulkaOdevzdanychReseniView(ListView): reseni_do = fcd["reseni_do"] jen_neobodovane = fcd["neobodovane"] else: - initial = FiltrForm.gen_initial(aktualni_rocnik) + initial = FiltrForm.gen_initial(self.aktualni_rocnik) resitele = initial['resitele'] problemy = initial['problemy'] reseni_od = initial['reseni_od'][0] @@ -76,22 +76,22 @@ class TabulkaOdevzdanychReseniView(ListView): # Chceme jen letošní problémy # FIXME: Neexistuje metoda, jak dostat starší problémy… - self.problemy = self.problemy.filter(Q(Tema___rocnik=aktualni_rocnik) | Q(Uloha___cislo_zadani__rocnik = aktualni_rocnik) | Q(Clanek___cislo__rocnik = aktualni_rocnik) | Q(Konfera___soustredeni__rocnik = aktualni_rocnik)) + self.problemy = self.problemy.filter(Q(Tema___rocnik=self.aktualni_rocnik) | Q(Uloha___cislo_zadani__rocnik = self.aktualni_rocnik) | Q(Clanek___cislo__rocnik = self.aktualni_rocnik) | Q(Konfera___soustredeni__rocnik = self.aktualni_rocnik)) self.chteni_resitele = resitele # Zapamatování pro get_context_data if resitele == FiltrForm.RESITELE_RELEVANTNI: # Nejde použít utils.resi_v_rocniku, protože noví řešitelé mohou mít neobodované řešení a takoví technicky zatím neřeší. # Proto používám neodmaturovavší řešitele, TODO: Chceme to takhle nebo jinak? - self.resitele = self.resitele.filter(rok_maturity__gt=aktualni_rocnik.prvni_rok) # Prvotní sada, pokud nebude mít body, odstraní se v get_context_data + self.resitele = self.resitele.filter(rok_maturity__gt=self.aktualni_rocnik.prvni_rok) # Prvotní sada, pokud nebude mít body, odstraní se v get_context_data elif resitele == FiltrForm.RESITELE_NEODMATUROVAVSI: - self.resitele = self.resitele.filter(rok_maturity__gt=aktualni_rocnik.prvni_rok) + self.resitele = self.resitele.filter(rok_maturity__gt=self.aktualni_rocnik.prvni_rok) if problemy == FiltrForm.PROBLEMY_MOJE: org = m.Organizator.objects.get(osoba__user=self.request.user) self.problemy = self.problemy.filter(Q(autor=org)|Q(garant=org)|Q(opravovatele=org), stav=m.Problem.STAV_ZADANY) elif problemy == FiltrForm.PROBLEMY_LETOSNI: self.problemy = self.problemy.filter(stav=m.Problem.STAV_ZADANY) - #self.problemy = list(filter(lambda problem: problem.rocnik() == aktualni_rocnik, self.problemy)) # DB HOG? # FIXME: některé problémy nemají ročník.... + #self.problemy = list(filter(lambda problem: problem.rocnik() == self.aktualni_rocnik, self.problemy)) # DB HOG? # FIXME: některé problémy nemají ročník.... # 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.problemy = self.problemy.non_polymorphic() @@ -148,7 +148,7 @@ class TabulkaOdevzdanychReseniView(ListView): hodnoty.append(resiteluv_radek) resitele_do_tabulky.append(resitel) ctx['radky'] = list(zip(resitele_do_tabulky, hodnoty)) - ctx['filtr'] = FiltrForm(initial=self.request.GET) + ctx['filtr'] = FiltrForm(initial=self.request.GET, rocnik=self.aktualni_rocnik) # Pro použití hacku na automatické {{form.media}} v template: ctx['form'] = ctx['filtr']