Browse Source

Drobné pročištění views a modelů týkající se zobrazování témátek

export_seznamu_prednasek
Pavel 'LEdoian' Turinsky 5 years ago
parent
commit
f007cac724
  1. 8
      seminar/models.py
  2. 24
      seminar/views/views_all.py

8
seminar/models.py

@ -728,6 +728,9 @@ class Problem(SeminarModelBase,PolymorphicModel):
return '<Není zadaný>' return '<Není zadaný>'
def verejne(self): 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()) return (self.cislo_zadani and self.cislo_zadani.verejne())
verejne.boolean = True verejne.boolean = True
@ -735,10 +738,7 @@ class Problem(SeminarModelBase,PolymorphicModel):
return reverse('seminar_problem', kwargs={'pk': self.id}) return reverse('seminar_problem', kwargs={'pk': self.id})
def admin_url(self): def admin_url(self):
if self.stav == Problem.STAV_ZADANY: return reverse('admin:seminar_problem_change', args=(self.id, ))
return reverse('admin:seminar_problemzadany_change', args=(self.id, ))
else:
return reverse('admin:seminar_problemnavrh_change', args=(self.id, ))
# FIXME - k úloze # FIXME - k úloze
def body_v_zavorce(self): def body_v_zavorce(self):

24
seminar/views/views_all.py

@ -543,19 +543,25 @@ class RocnikView(generic.DetailView):
class ProblemView(generic.DetailView): class ProblemView(generic.DetailView):
model = Problem model = Problem
def _je_clanek(self, problem): # 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ě...
return problem.typ in [Problem.TYP_ORG_CLANEK, Problem.TYP_RES_CLANEK]
def get_template_names(self, **kwargs): def get_template_names(self, **kwargs):
context = super(ProblemView, self).get_context_data(**kwargs) # 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.
return ['seminar/archiv/problem_' + ('clanek.html' if self._je_clanek(context['problem']) else 'uloha_tema.html')] 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): def get_context_data(self, **kwargs):
context = super(ProblemView, self).get_context_data(**kwargs) context = super().get_context_data(**kwargs)
if not context['problem'].verejne() and not self.request.user.is_staff: # 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() raise PermissionDenied()
if context['problem'].typ == Problem.TYP_RES_CLANEK: if isinstance(context['object'], Clanek):
context['reseni'] = Reseni.objects.filter(problem=context['problem']).select_related('resitel').order_by('resitel__prijmeni') context['reseni'] = Reseni.objects.filter(problem=context['object']).select_related('resitel').order_by('resitel__prijmeni')
return context return context

Loading…
Cancel
Save