Tabulka řešení: Další varianty pro různé ročníky
This commit is contained in:
parent
b1ff0bc784
commit
ca495456db
3 changed files with 18 additions and 11 deletions
|
@ -347,7 +347,7 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form):
|
|||
|
||||
|
||||
@classmethod
|
||||
def gen_terminy(cls):
|
||||
def gen_terminy(cls, rocnik=None):
|
||||
import datetime
|
||||
from time import strftime
|
||||
|
||||
|
@ -362,6 +362,11 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form):
|
|||
logger.error("Rozbitá databáze (před počátečními migracemi?)")
|
||||
return [('broken', 'Je to rozbitý'), ('fubar', 'Nefunguje to')]
|
||||
|
||||
# FIXME: Tohle je hnusný monkey patch, mělo by to být nějak zahrnuto výš.
|
||||
if rocnik is not None:
|
||||
aktualni_rocnik = rocnik
|
||||
aktualni_cislo = m.Cislo.objects.filter(rocnik=rocnik).order_by('poradi').last()
|
||||
|
||||
result = []
|
||||
|
||||
for cislo in m.Cislo.objects.filter(
|
||||
|
@ -391,8 +396,8 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form):
|
|||
return result
|
||||
|
||||
@classmethod
|
||||
def gen_initial(cls):
|
||||
terminy = cls.gen_terminy()
|
||||
def gen_initial(cls, rocnik=None):
|
||||
terminy = cls.gen_terminy(rocnik)
|
||||
initial = {
|
||||
'resitele': cls.RESITELE_RELEVANTNI,
|
||||
'problemy': cls.PROBLEMY_MOJE,
|
||||
|
@ -402,14 +407,14 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form):
|
|||
}
|
||||
return initial
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__(self, *args, rocnik=None, **kwargs):
|
||||
if 'initial' not in kwargs:
|
||||
super().__init__(initial=self.gen_initial(), *args, **kwargs)
|
||||
super().__init__(initial=self.gen_initial(rocnik), *args, **kwargs)
|
||||
else:
|
||||
super().__init__(*args, **kwargs)
|
||||
# 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()
|
||||
self.terminy = self.gen_terminy(rocnik)
|
||||
self.fields['reseni_od'].widget = forms.Select(choices=self.gen_terminy())
|
||||
self.fields['reseni_od'].initial = self.terminy[-2]
|
||||
self.fields['reseni_do'].widget = forms.Select(choices=self.gen_terminy())
|
||||
|
|
|
@ -173,6 +173,7 @@ urlpatterns = [
|
|||
# name='seminar_autocomplete_organizator')
|
||||
|
||||
path('org/reseni/', org_required(views.TabulkaOdevzdanychReseniView.as_view()), name='odevzdavatko_tabulka'),
|
||||
path('org/reseni/rocnik/<int:rocnik>/', org_required(views.TabulkaOdevzdanychReseniView.as_view()), name='odevzdavatko_tabulka'),
|
||||
path('org/reseni/<int:problem>/<int:resitel>/', org_required(views.ReseniProblemuView.as_view()), name='odevzdavatko_reseni_resitele_k_problemu'),
|
||||
path('org/reseni/<int:pk>', org_required(viewMethodSwitch(get=views.DetailReseniView.as_view(), post=views.hodnoceniReseniView)), name='odevzdavatko_detail_reseni'),
|
||||
path('org/reseni/all', org_required(views.SeznamReseniView.as_view())),
|
||||
|
|
|
@ -53,7 +53,11 @@ class TabulkaOdevzdanychReseniView(ListView):
|
|||
self.problemy = m.Problem.objects.all()
|
||||
self.reseni = m.Reseni.objects.all()
|
||||
|
||||
form = FiltrForm(self.request.GET)
|
||||
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'])
|
||||
|
||||
form = FiltrForm(self.request.GET, rocnik=aktualni_rocnik)
|
||||
if form.is_valid():
|
||||
fcd = form.cleaned_data
|
||||
resitele = fcd["resitele"]
|
||||
|
@ -62,7 +66,7 @@ class TabulkaOdevzdanychReseniView(ListView):
|
|||
reseni_do = fcd["reseni_do"]
|
||||
jen_neobodovane = fcd["neobodovane"]
|
||||
else:
|
||||
initial = FiltrForm.gen_initial()
|
||||
initial = FiltrForm.gen_initial(aktualni_rocnik)
|
||||
resitele = initial['resitele']
|
||||
problemy = initial['problemy']
|
||||
reseni_od = initial['reseni_od'][0]
|
||||
|
@ -70,9 +74,6 @@ class TabulkaOdevzdanychReseniView(ListView):
|
|||
jen_neobodovane = initial["neobodovane"]
|
||||
|
||||
|
||||
# Filtrujeme!
|
||||
aktualni_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci
|
||||
|
||||
# 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))
|
||||
|
|
Loading…
Reference in a new issue