From f007cac72436fd3983d45945d34ce28ceb26f78c Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Wed, 22 Apr 2020 22:21:23 +0200 Subject: [PATCH] =?UTF-8?q?Drobn=C3=A9=20pro=C4=8Di=C5=A1t=C4=9Bn=C3=AD=20?= =?UTF-8?q?views=20a=20model=C5=AF=20t=C3=BDkaj=C3=ADc=C3=AD=20se=20zobraz?= =?UTF-8?q?ov=C3=A1n=C3=AD=20t=C3=A9m=C3=A1tek?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models.py | 8 ++++---- seminar/views/views_all.py | 24 +++++++++++++++--------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/seminar/models.py b/seminar/models.py index 226fec78..57d4304a 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -728,6 +728,9 @@ class Problem(SeminarModelBase,PolymorphicModel): return '' def verejne(self): + # FIXME: Tohle se liší podle typu problému, má se udělat polymorfně. + # Zatím je tu jen dummy fail-safe default: nic není veřejné. + return False return (self.cislo_zadani and self.cislo_zadani.verejne()) verejne.boolean = True @@ -735,10 +738,7 @@ class Problem(SeminarModelBase,PolymorphicModel): return reverse('seminar_problem', kwargs={'pk': self.id}) def admin_url(self): - if self.stav == Problem.STAV_ZADANY: - return reverse('admin:seminar_problemzadany_change', args=(self.id, )) - else: - return reverse('admin:seminar_problemnavrh_change', args=(self.id, )) + return reverse('admin:seminar_problem_change', args=(self.id, )) # FIXME - k úloze def body_v_zavorce(self): diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 3d31dfc4..5259c025 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -543,19 +543,25 @@ class RocnikView(generic.DetailView): class ProblemView(generic.DetailView): model = Problem - def _je_clanek(self, problem): - return problem.typ in [Problem.TYP_ORG_CLANEK, Problem.TYP_RES_CLANEK] - + # Používáme funkci, protože přímo template_name neumí mít v přiřazení dost logiky. Ledaže by se to udělalo polymorfně... def get_template_names(self, **kwargs): - context = super(ProblemView, self).get_context_data(**kwargs) - return ['seminar/archiv/problem_' + ('clanek.html' if self._je_clanek(context['problem']) else 'uloha_tema.html')] + # FIXME: Switch podle typu není hezký, ale nechtělo se mi to přepisovat celé. Správně by se tohle mělo řešit polymorfismem. + spravne_templaty = { + s.Uloha: "uloha", + s.Tema: "tema", + s.Konfera: "konfera", + s.Clanek: "clanek", + } + context = super().get_context_data(**kwargs) + return ['seminar/archiv/problem_' + spravne_templaty[context['object'].__class__] + '.html'] def get_context_data(self, **kwargs): - context = super(ProblemView, self).get_context_data(**kwargs) - if not context['problem'].verejne() and not self.request.user.is_staff: + context = super().get_context_data(**kwargs) + # Musí se používat context['object'], protože nevíme, jestli dostaneme úložku, téma, článek, .... a tyhle věci vyrábějí různé klíče. + if not context['object'].verejne() and not self.request.user.is_staff: raise PermissionDenied() - if context['problem'].typ == Problem.TYP_RES_CLANEK: - context['reseni'] = Reseni.objects.filter(problem=context['problem']).select_related('resitel').order_by('resitel__prijmeni') + if isinstance(context['object'], Clanek): + context['reseni'] = Reseni.objects.filter(problem=context['object']).select_related('resitel').order_by('resitel__prijmeni') return context