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
|
@classmethod
|
||||||
def gen_terminy(cls):
|
def gen_terminy(cls, rocnik=None):
|
||||||
import datetime
|
import datetime
|
||||||
from time import strftime
|
from time import strftime
|
||||||
|
|
||||||
|
@ -362,6 +362,11 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form):
|
||||||
logger.error("Rozbitá databáze (před počátečními migracemi?)")
|
logger.error("Rozbitá databáze (před počátečními migracemi?)")
|
||||||
return [('broken', 'Je to rozbitý'), ('fubar', 'Nefunguje to')]
|
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 = []
|
result = []
|
||||||
|
|
||||||
for cislo in m.Cislo.objects.filter(
|
for cislo in m.Cislo.objects.filter(
|
||||||
|
@ -391,8 +396,8 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def gen_initial(cls):
|
def gen_initial(cls, rocnik=None):
|
||||||
terminy = cls.gen_terminy()
|
terminy = cls.gen_terminy(rocnik)
|
||||||
initial = {
|
initial = {
|
||||||
'resitele': cls.RESITELE_RELEVANTNI,
|
'resitele': cls.RESITELE_RELEVANTNI,
|
||||||
'problemy': cls.PROBLEMY_MOJE,
|
'problemy': cls.PROBLEMY_MOJE,
|
||||||
|
@ -402,14 +407,14 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form):
|
||||||
}
|
}
|
||||||
return initial
|
return initial
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, rocnik=None, **kwargs):
|
||||||
if 'initial' not in kwargs:
|
if 'initial' not in kwargs:
|
||||||
super().__init__(initial=self.gen_initial(), *args, **kwargs)
|
super().__init__(initial=self.gen_initial(rocnik), *args, **kwargs)
|
||||||
else:
|
else:
|
||||||
super().__init__(*args, **kwargs)
|
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...
|
# 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...
|
# 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'].widget = forms.Select(choices=self.gen_terminy())
|
||||||
self.fields['reseni_od'].initial = self.terminy[-2]
|
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())
|
||||||
|
|
|
@ -173,6 +173,7 @@ urlpatterns = [
|
||||||
# name='seminar_autocomplete_organizator')
|
# name='seminar_autocomplete_organizator')
|
||||||
|
|
||||||
path('org/reseni/', org_required(views.TabulkaOdevzdanychReseniView.as_view()), name='odevzdavatko_tabulka'),
|
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: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/<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())),
|
path('org/reseni/all', org_required(views.SeznamReseniView.as_view())),
|
||||||
|
|
|
@ -53,7 +53,11 @@ class TabulkaOdevzdanychReseniView(ListView):
|
||||||
self.problemy = m.Problem.objects.all()
|
self.problemy = m.Problem.objects.all()
|
||||||
self.reseni = m.Reseni.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():
|
if form.is_valid():
|
||||||
fcd = form.cleaned_data
|
fcd = form.cleaned_data
|
||||||
resitele = fcd["resitele"]
|
resitele = fcd["resitele"]
|
||||||
|
@ -62,7 +66,7 @@ class TabulkaOdevzdanychReseniView(ListView):
|
||||||
reseni_do = fcd["reseni_do"]
|
reseni_do = fcd["reseni_do"]
|
||||||
jen_neobodovane = fcd["neobodovane"]
|
jen_neobodovane = fcd["neobodovane"]
|
||||||
else:
|
else:
|
||||||
initial = FiltrForm.gen_initial()
|
initial = FiltrForm.gen_initial(aktualni_rocnik)
|
||||||
resitele = initial['resitele']
|
resitele = initial['resitele']
|
||||||
problemy = initial['problemy']
|
problemy = initial['problemy']
|
||||||
reseni_od = initial['reseni_od'][0]
|
reseni_od = initial['reseni_od'][0]
|
||||||
|
@ -70,9 +74,6 @@ class TabulkaOdevzdanychReseniView(ListView):
|
||||||
jen_neobodovane = initial["neobodovane"]
|
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
|
# Chceme jen letošní problémy
|
||||||
# FIXME: Neexistuje metoda, jak dostat starší 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=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