Odevzdávátko: přehled řešení pro řešitele (ošklivý)
This commit is contained in:
parent
795ab34714
commit
36c8acbbd6
2 changed files with 26 additions and 0 deletions
|
@ -173,4 +173,5 @@ urlpatterns = [
|
||||||
path('temp/reseni/<int:pk>', org_required(viewMethodSwitch(get=views.DetailReseniView.as_view(), post=views.hodnoceniReseniView)), name='odevzdavatko_detail_reseni'),
|
path('temp/reseni/<int:pk>', org_required(viewMethodSwitch(get=views.DetailReseniView.as_view(), post=views.hodnoceniReseniView)), name='odevzdavatko_detail_reseni'),
|
||||||
path('temp/reseni/all', org_required(views.SeznamReseniView.as_view())),
|
path('temp/reseni/all', org_required(views.SeznamReseniView.as_view())),
|
||||||
path('temp/reseni/akt', org_required(views.SeznamAktualnichReseniView.as_view())),
|
path('temp/reseni/akt', org_required(views.SeznamAktualnichReseniView.as_view())),
|
||||||
|
path('temp/reseni/resitel', resitel_required(views.PrehledOdevzdanychReseni.as_view())),
|
||||||
]
|
]
|
||||||
|
|
|
@ -25,6 +25,8 @@ logger = logging.getLogger(__name__)
|
||||||
# - ReseniProblemuView
|
# - ReseniProblemuView
|
||||||
# - Detail konkrétního řešení -- všechny soubory, datum, ...
|
# - Detail konkrétního řešení -- všechny soubory, datum, ...
|
||||||
# - DetailReseniView
|
# - DetailReseniView
|
||||||
|
# - Pro řešitele: přehled jejich odevzdaných řešení
|
||||||
|
# - PrehledOdevzdanychReseni
|
||||||
#
|
#
|
||||||
# Taky se může hodit:
|
# Taky se může hodit:
|
||||||
# - Tabulka všech řešitelů x všech problémů?
|
# - Tabulka všech řešitelů x všech problémů?
|
||||||
|
@ -238,6 +240,29 @@ def hodnoceniReseniView(request, pk, *args, **kwargs):
|
||||||
return redirect(success_url)
|
return redirect(success_url)
|
||||||
|
|
||||||
|
|
||||||
|
class PrehledOdevzdanychReseni(ListView):
|
||||||
|
model = m.Hodnoceni
|
||||||
|
template_name = 'seminar/odevzdavatko/resitel_prehled.html'
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
if not self.request.user.is_authenticated:
|
||||||
|
raise RuntimeError("Uživatel měl být přihlášený!")
|
||||||
|
resitel = m.Resitel.objects.get(osoba__user=self.request.user)
|
||||||
|
qs = super().get_queryset()
|
||||||
|
qs = qs.filter(reseni__resitele__in=[resitel])
|
||||||
|
return qs
|
||||||
|
|
||||||
|
def get_context_data(self, *args, **kwargs):
|
||||||
|
ctx = super().get_context_data(*args, **kwargs)
|
||||||
|
# Ročník určujeme podle čísla, do jehož deadlinu došlo řešení.
|
||||||
|
# Chceme to mít seřazené, takže místo comphrerehsion ručně postavíme pole polí. Django templates neumí použít OrderedDict :-/
|
||||||
|
podle_rocniku = []
|
||||||
|
for rocnik, hodnoceni in groupby(ctx['object_list'], lambda ho: deadline(ho.reseni.cas_doruceni)[1].rocnik):
|
||||||
|
podle_rocniku.append((rocnik, list(hodnoceni)))
|
||||||
|
ctx['podle_rocniku'] = reversed(podle_rocniku) # Od nejnovějšího ročníku
|
||||||
|
# TODO: Umožnit stažení / zobrazení řešení
|
||||||
|
return ctx
|
||||||
|
|
||||||
# Přehled všech řešení kvůli debugování
|
# Přehled všech řešení kvůli debugování
|
||||||
|
|
||||||
class SeznamReseniView(ListView):
|
class SeznamReseniView(ListView):
|
||||||
|
|
Loading…
Reference in a new issue