From cc17d5680b120c9933661a3a8debb448a77a233b Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Wed, 6 May 2020 23:26:06 +0200 Subject: [PATCH] Refaktorizace ArchivTemataView MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Já jsem si říkal, že to musí jít jednodušeji. --- seminar/views/views_all.py | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 79de03e1..896d8952 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -778,27 +778,13 @@ class CisloView(generic.DetailView): class ArchivTemataView(generic.ListView): model = Problem 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): 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() - for rocnik in rocniky: - ctx['rocniky'][rocnik] = [] - for tema in ctx['object_list']: - if tema.rocnik == rocnik: - ctx['rocniky'][rocnik].append(tema) + for rocnik, temata in groupby(ctx['object_list'], lambda tema: tema.rocnik): + ctx['rocniky'][rocnik] = list(temata) return ctx ### Generovani vysledkovky