Browse Source

Refaktorizace ArchivTemataView

Já jsem si říkal, že to musí jít jednodušeji.
middleware_test
Pavel 'LEdoian' Turinsky 5 years ago
parent
commit
cc17d5680b
  1. 20
      seminar/views/views_all.py

20
seminar/views/views_all.py

@ -778,27 +778,13 @@ class CisloView(generic.DetailView):
class ArchivTemataView(generic.ListView): class ArchivTemataView(generic.ListView):
model = Problem model = Problem
template_name = 'seminar/archiv/temata.html' template_name = 'seminar/archiv/temata.html'
queryset = Tema.objects.filter(stav=Problem.STAV_ZADANY).select_related('rocnik').order_by('-rocnik', 'kod') queryset = Tema.objects.filter(stav=Problem.STAV_ZADANY).select_related('rocnik').order_by('rocnik', 'kod')
def get_context_data(self, *args, **kwargs): def get_context_data(self, *args, **kwargs):
ctx = super().get_context_data(*args, **kwargs) ctx = super().get_context_data(*args, **kwargs)
# Najdeme, jaké ročníky mají témata
# TODO: Tohle by se rovnou mohlo tahat z databáze, ne?
# Navíc už asi nepotřebuji ten select_related, že?
rocniky_set = set()
for tema in ctx['object_list']:
rocniky_set.add(tema.rocnik)
rocniky = list(rocniky_set)
rocniky.sort(key=lambda r: int(r.rocnik), reverse=True)
# Přiřadíme témátka k ročníkům
# TODO: Asi taky jde udělat nějak elegantněji, ne?
ctx['rocniky'] = OrderedDict() ctx['rocniky'] = OrderedDict()
for rocnik in rocniky: for rocnik, temata in groupby(ctx['object_list'], lambda tema: tema.rocnik):
ctx['rocniky'][rocnik] = [] ctx['rocniky'][rocnik] = list(temata)
for tema in ctx['object_list']:
if tema.rocnik == rocnik:
ctx['rocniky'][rocnik].append(tema)
return ctx return ctx
### Generovani vysledkovky ### Generovani vysledkovky

Loading…
Cancel
Save