From 428d1c5db9178e54401aff07d88da61b6cfb094d Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 16 Mar 2021 20:06:45 +0100 Subject: [PATCH 01/11] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20Implementov?= =?UTF-8?q?=C3=A1ni=20"Relevantn=C3=AD=20=C5=99e=C5=A1itel=C3=A9"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/odevzdavatko.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/seminar/views/odevzdavatko.py b/seminar/views/odevzdavatko.py index 7cc95d77..5458a8ca 100644 --- a/seminar/views/odevzdavatko.py +++ b/seminar/views/odevzdavatko.py @@ -66,9 +66,10 @@ class TabulkaOdevzdanychReseniView(ListView): # Filtrujeme! aktualni_rocnik = m.Nastaveni.get_solo().aktualni_rocnik # .get_solo() vrátí tu jedinou instanci + self.chteni_resitele = resitele # Zapamatování pro get_context_data if resitele == FiltrForm.RESITELE_RELEVANTNI: - logger.warning("Někdo chtěl v tabulce jen relevantní řešitele a měl smůlu :-(") - resitele = FiltrForm.RESITELE_LETOSNI # Fall-through + # TODO: Zkontrolovat, že resi_v_rocniku vrací QuerySet (jinak asi bude žrát spoustu zdrojů zbytečně) + self.resitele = resi_v_rocniku(aktualni_rocnik) # Prvotní sada, pokud nebude mít body, odstraní se v get_context_data elif resitele == FiltrForm.RESITELE_LETOSNI: self.resitele = resi_v_rocniku(aktualni_rocnik) @@ -119,16 +120,20 @@ class TabulkaOdevzdanychReseniView(ListView): pridej_reseni(hodnoceni.problem, resitel, hodnoceni.body, hodnoceni.reseni.cas_doruceni) hodnoty = [] + resitele_do_tabulky = [] for resitel in self.resitele: + dostal_body = False resiteluv_radek = [] for problem in self.problemy: if problem in tabulka and resitel in tabulka[problem]: resiteluv_radek.append(tabulka[problem][resitel]) + dostal_body = True else: resiteluv_radek.append(None) - hodnoty.append(resiteluv_radek) - ctx['radky'] = list(zip(self.resitele, hodnoty)) - + if self.chteni_resitele != FiltrForm.RESITELE_RELEVANTNI or dostal_body: + hodnoty.append(resiteluv_radek) + resitele_do_tabulky.append(resitel) + ctx['radky'] = list(zip(resitele_do_tabulky, hodnoty)) ctx['filtr'] = FiltrForm(initial=self.request.GET) # Pro použití hacku na automatické {{form.media}} v template: ctx['form'] = ctx['filtr'] From 3088c5ce18081253932943bf1c8bf4c061315119 Mon Sep 17 00:00:00 2001 From: Jonas Havelka Date: Tue, 16 Mar 2021 20:12:00 +0100 Subject: [PATCH 02/11] =?UTF-8?q?Zve=C5=99ejn=C4=9Bny=20v=C3=BDsledkovky?= =?UTF-8?q?=20v=20testdatech?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/testutils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/seminar/testutils.py b/seminar/testutils.py index 9f15dc5c..e8d7c143 100644 --- a/seminar/testutils.py +++ b/seminar/testutils.py @@ -434,7 +434,8 @@ def gen_cisla(rnd, rocniky): poradi = str(ci), datum_vydani=vydano, datum_deadline=deadline, - verejne_db=True + verejne_db=True, + verejna_vysledkovka=True ) node2 = CisloNode.objects.create(cislo = cislo, succ = node, root=rocnik.rocniknode) cislo.save() From f28e1cec30f1a50f26081b5ef90baa0b043a7438 Mon Sep 17 00:00:00 2001 From: Tomas 'Jethro' Pokorny Date: Tue, 16 Mar 2021 21:36:59 +0100 Subject: [PATCH 03/11] =?UTF-8?q?P=C5=99id=C3=A1n=20management=20command?= =?UTF-8?q?=20pro=20ukl=C3=A1d=C3=A1n=C3=AD=20a=20na=C4=8D=C3=ADt=C3=A1n?= =?UTF-8?q?=C3=AD=20pr=C3=A1v=20skupiny=20org.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commands/load_org_permissions.py | 26 +++++++++++++++++++ .../commands/save_org_permissions.py | 22 ++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 seminar/management/commands/load_org_permissions.py create mode 100644 seminar/management/commands/save_org_permissions.py diff --git a/seminar/management/commands/load_org_permissions.py b/seminar/management/commands/load_org_permissions.py new file mode 100644 index 00000000..90dc36c4 --- /dev/null +++ b/seminar/management/commands/load_org_permissions.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- + +from django.core.management.base import BaseCommand +from django.contrib.sessions.models import Session +from django.contrib.auth.models import Group, Permission +from django.contrib.contenttypes.models import ContentType +import json +import argparse + +class Command(BaseCommand): + """ + + """ + def add_arguments(self, parser): + parser.add_argument('file', nargs=1, type=argparse.FileType('r', encoding='utf8')) + + + def handle(self, *args, **options): + orgroup = Group.objects.get(name='org') + permissions = json.load(options['file'][0]) + for jp in permissions: + ct = ContentType.objects.get(app_label = jp['ct_app_label'], model = jp['ct_model']) + perm = Permission.objects.get(content_type = ct, codename = jp['codename']) + orgroup.permissions.add(perm) + orgroup.save() + diff --git a/seminar/management/commands/save_org_permissions.py b/seminar/management/commands/save_org_permissions.py new file mode 100644 index 00000000..a6814e6f --- /dev/null +++ b/seminar/management/commands/save_org_permissions.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- + +from django.core.management.base import BaseCommand +from django.contrib.sessions.models import Session +from django.contrib.auth.models import Group, Permission +import json + +class Command(BaseCommand): + """ + Dump permissions for group 'org' such that them can be used on an other machine. + + """ + def handle(self, *args, **options): + orgroup = Group.objects.get(name='org') + permissions = [] + for p in orgroup.permissions.all(): + permissions.append({ + 'codename': p.codename, + 'ct_app_label': p.content_type.app_label, + 'ct_model': p.content_type.model}) + print(json.dumps(permissions)) + From cf175a50b2ff8a7a6e0f8ee0ebaa7fb115af7e4d Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 16 Mar 2021 21:37:58 +0100 Subject: [PATCH 04/11] =?UTF-8?q?Odevzd=C3=A1v=C3=A1tko:=20skoro=20spr?= =?UTF-8?q?=C3=A1vn=C4=9B=20formul=C3=A1=C5=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/forms.py | 22 +++++++++++++++++----- seminar/views/odevzdavatko.py | 4 ++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/seminar/forms.py b/seminar/forms.py index 5fbd54a3..7018c1e9 100644 --- a/seminar/forms.py +++ b/seminar/forms.py @@ -383,14 +383,25 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form): return result + @classmethod + def gen_terminy_safe(cls): + "Při prvotních migracích / nasazeních webu neexistuje nastavení, takže to hodí výjimku, kterou musíme požrat..." + try: + return cls.gen_terminy() + except NotImplementedError: + return [ + ('1970-01-01', "Je to rozbitý"), + ('2012-12-12', "Svět skončil v roce 2012") + ] + @classmethod def gen_initial(cls): terminy = cls.gen_terminy() initial = { 'resitele': cls.RESITELE_RELEVANTNI, 'problemy': cls.PROBLEMY_MOJE, - 'reseni_od': terminy[-2][0], - 'reseni_do': terminy[-1][0], + 'reseni_od': terminy[-2], + 'reseni_do': terminy[-1], } return initial @@ -399,16 +410,17 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form): super().__init__(initial=self.gen_initial(), *args, **kwargs) else: super().__init__(*args, **kwargs) - # choices jako parametr Select widgetu neumí brát callable, jen iterable, takže si pro jednoduchost můžu rovnou uložit výsledek sem... # A "sem" znamená do libovolné metody, protože jinak se jedná o kód, který django spustí při inicializaci a protože potřebujeme databázi, tak by spadnul při vyrábění testdat... self.terminy = self.gen_terminy() + self.fields['reseni_od'].widget = forms.Select(choices=self.gen_terminy_safe()) + self.fields['reseni_od'].initial = self.terminy[-2] + self.fields['reseni_do'].widget = forms.Select(choices=self.gen_terminy_safe()) + self.fields['reseni_do'].initial = self.terminy[-1] # NOTE: Initial definuji pro jednotlivé fieldy, aby to bylo tady a nebylo potřeba to řešit ve views... resitele = forms.ChoiceField(choices=RESITELE_CHOICES) problemy = forms.ChoiceField(choices=PROBLEMY_CHOICES) -# reseni_od = forms.DateField(input_formats=[DATE_FORMAT], widget=forms.Select(choices=self.terminy)) -# reseni_do = forms.DateField(input_formats=[DATE_FORMAT], widget=forms.Select(choices=self.terminy)) reseni_od = forms.DateField(input_formats=[DATE_FORMAT]) reseni_do = forms.DateField(input_formats=[DATE_FORMAT]) diff --git a/seminar/views/odevzdavatko.py b/seminar/views/odevzdavatko.py index 5458a8ca..5c64bc11 100644 --- a/seminar/views/odevzdavatko.py +++ b/seminar/views/odevzdavatko.py @@ -60,8 +60,8 @@ class TabulkaOdevzdanychReseniView(ListView): initial = FiltrForm.gen_initial() resitele = initial['resitele'] problemy = initial['problemy'] - reseni_od = initial['reseni_od'] - reseni_do = initial['reseni_do'] + reseni_od = initial['reseni_od'][0] + reseni_do = initial['reseni_do'][0] # Filtrujeme! From 97ae472d2ee208cc3dbcd43fa62398c6ba29e5c9 Mon Sep 17 00:00:00 2001 From: Tomas 'Jethro' Pokorny Date: Tue, 16 Mar 2021 21:38:07 +0100 Subject: [PATCH 05/11] Bugfix --- seminar/management/commands/load_org_permissions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/seminar/management/commands/load_org_permissions.py b/seminar/management/commands/load_org_permissions.py index 90dc36c4..58086601 100644 --- a/seminar/management/commands/load_org_permissions.py +++ b/seminar/management/commands/load_org_permissions.py @@ -18,6 +18,7 @@ class Command(BaseCommand): def handle(self, *args, **options): orgroup = Group.objects.get(name='org') permissions = json.load(options['file'][0]) + orgroup.permissions.clear() for jp in permissions: ct = ContentType.objects.get(app_label = jp['ct_app_label'], model = jp['ct_model']) perm = Permission.objects.get(content_type = ct, codename = jp['codename']) From d6bddee9649241f249062d8a6516564af064bbfe Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 16 Mar 2021 22:00:18 +0100 Subject: [PATCH 06/11] Fix odkazu na wiki --- seminar/templates/seminar/orgorozcestnik.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seminar/templates/seminar/orgorozcestnik.html b/seminar/templates/seminar/orgorozcestnik.html index 4e5fbc78..0a70899a 100644 --- a/seminar/templates/seminar/orgorozcestnik.html +++ b/seminar/templates/seminar/orgorozcestnik.html @@ -5,7 +5,7 @@

Informace, komunikace

    -
  • wiki obsahuje různé návody a know-how
  • +
  • wiki obsahuje různé návody a know-how
  • Riot chatování s dalšími orgy
  • Kanboard správa TODO
      From 4284cbd35c73cbbe22f1a21e62b6b7a07577a9ed Mon Sep 17 00:00:00 2001 From: Tomas 'Jethro' Pokorny Date: Tue, 16 Mar 2021 22:20:41 +0100 Subject: [PATCH 07/11] =?UTF-8?q?Bugfix=20-=20kdy=C5=BE=20skupina=20'org'?= =?UTF-8?q?=20neexistuje,=20p=C5=99idej=20ji.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/management/commands/load_org_permissions.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/seminar/management/commands/load_org_permissions.py b/seminar/management/commands/load_org_permissions.py index 58086601..c1e4a106 100644 --- a/seminar/management/commands/load_org_permissions.py +++ b/seminar/management/commands/load_org_permissions.py @@ -4,6 +4,7 @@ from django.core.management.base import BaseCommand from django.contrib.sessions.models import Session from django.contrib.auth.models import Group, Permission from django.contrib.contenttypes.models import ContentType +from django.core.exceptions import ObjectDoesNotExist import json import argparse @@ -16,7 +17,11 @@ class Command(BaseCommand): def handle(self, *args, **options): - orgroup = Group.objects.get(name='org') + try: + orgroup = Group.objects.get(name='org') + except ObjectDoesNotExist: + orgroup = Group(name='org') + orgroup.save() permissions = json.load(options['file'][0]) orgroup.permissions.clear() for jp in permissions: From d6799e1898111a4f7efd9695af77dd57dbf02db7 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 16 Mar 2021 22:43:59 +0100 Subject: [PATCH 08/11] =?UTF-8?q?Fix=20odkazu=20na=20=C3=BApravu=20orga?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/orgorozcestnik.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seminar/templates/seminar/orgorozcestnik.html b/seminar/templates/seminar/orgorozcestnik.html index 0a70899a..3ad954a1 100644 --- a/seminar/templates/seminar/orgorozcestnik.html +++ b/seminar/templates/seminar/orgorozcestnik.html @@ -80,7 +80,7 @@

      Můj profil


      From 6a4a68666427c4793887bb6c899ac2c865332845 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 16 Mar 2021 23:05:20 +0100 Subject: [PATCH 09/11] =?UTF-8?q?P=C5=99id=C3=A1na=20pr=C3=A1va=20organiz?= =?UTF-8?q?=C3=A1torsk=C3=A9=20skupiny=20pr=C3=A1v?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Použije se pomocí ./manage.py load_org_permissions admin_org_prava.json --- admin_org_prava.json | 592 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 592 insertions(+) create mode 100644 admin_org_prava.json diff --git a/admin_org_prava.json b/admin_org_prava.json new file mode 100644 index 00000000..7f1623f7 --- /dev/null +++ b/admin_org_prava.json @@ -0,0 +1,592 @@ +[ + { + "codename": "org", + "ct_app_label": "auth", + "ct_model": "user" + }, + { + "codename": "add_flatpage", + "ct_app_label": "flatpages", + "ct_model": "flatpage" + }, + { + "codename": "change_flatpage", + "ct_app_label": "flatpages", + "ct_model": "flatpage" + }, + { + "codename": "delete_flatpage", + "ct_app_label": "flatpages", + "ct_model": "flatpage" + }, + { + "codename": "view_flatpage", + "ct_app_label": "flatpages", + "ct_model": "flatpage" + }, + { + "codename": "add_galerie", + "ct_app_label": "galerie", + "ct_model": "galerie" + }, + { + "codename": "change_galerie", + "ct_app_label": "galerie", + "ct_model": "galerie" + }, + { + "codename": "delete_galerie", + "ct_app_label": "galerie", + "ct_model": "galerie" + }, + { + "codename": "view_galerie", + "ct_app_label": "galerie", + "ct_model": "galerie" + }, + { + "codename": "add_obrazek", + "ct_app_label": "galerie", + "ct_model": "obrazek" + }, + { + "codename": "change_obrazek", + "ct_app_label": "galerie", + "ct_model": "obrazek" + }, + { + "codename": "delete_obrazek", + "ct_app_label": "galerie", + "ct_model": "obrazek" + }, + { + "codename": "view_obrazek", + "ct_app_label": "galerie", + "ct_model": "obrazek" + }, + { + "codename": "add_komentar", + "ct_app_label": "korektury", + "ct_model": "komentar" + }, + { + "codename": "change_komentar", + "ct_app_label": "korektury", + "ct_model": "komentar" + }, + { + "codename": "delete_komentar", + "ct_app_label": "korektury", + "ct_model": "komentar" + }, + { + "codename": "view_komentar", + "ct_app_label": "korektury", + "ct_model": "komentar" + }, + { + "codename": "add_korekturovanepdf", + "ct_app_label": "korektury", + "ct_model": "korekturovanepdf" + }, + { + "codename": "change_korekturovanepdf", + "ct_app_label": "korektury", + "ct_model": "korekturovanepdf" + }, + { + "codename": "delete_korekturovanepdf", + "ct_app_label": "korektury", + "ct_model": "korekturovanepdf" + }, + { + "codename": "view_korekturovanepdf", + "ct_app_label": "korektury", + "ct_model": "korekturovanepdf" + }, + { + "codename": "add_oprava", + "ct_app_label": "korektury", + "ct_model": "oprava" + }, + { + "codename": "change_oprava", + "ct_app_label": "korektury", + "ct_model": "oprava" + }, + { + "codename": "delete_oprava", + "ct_app_label": "korektury", + "ct_model": "oprava" + }, + { + "codename": "view_oprava", + "ct_app_label": "korektury", + "ct_model": "oprava" + }, + { + "codename": "add_hlasovani", + "ct_app_label": "prednasky", + "ct_model": "hlasovani" + }, + { + "codename": "change_hlasovani", + "ct_app_label": "prednasky", + "ct_model": "hlasovani" + }, + { + "codename": "delete_hlasovani", + "ct_app_label": "prednasky", + "ct_model": "hlasovani" + }, + { + "codename": "view_hlasovani", + "ct_app_label": "prednasky", + "ct_model": "hlasovani" + }, + { + "codename": "add_prednaska", + "ct_app_label": "prednasky", + "ct_model": "prednaska" + }, + { + "codename": "change_prednaska", + "ct_app_label": "prednasky", + "ct_model": "prednaska" + }, + { + "codename": "delete_prednaska", + "ct_app_label": "prednasky", + "ct_model": "prednaska" + }, + { + "codename": "view_prednaska", + "ct_app_label": "prednasky", + "ct_model": "prednaska" + }, + { + "codename": "add_seznam", + "ct_app_label": "prednasky", + "ct_model": "seznam" + }, + { + "codename": "change_seznam", + "ct_app_label": "prednasky", + "ct_model": "seznam" + }, + { + "codename": "delete_seznam", + "ct_app_label": "prednasky", + "ct_model": "seznam" + }, + { + "codename": "view_seznam", + "ct_app_label": "prednasky", + "ct_model": "seznam" + }, + { + "codename": "add_cislo", + "ct_app_label": "seminar", + "ct_model": "cislo" + }, + { + "codename": "change_cislo", + "ct_app_label": "seminar", + "ct_model": "cislo" + }, + { + "codename": "delete_cislo", + "ct_app_label": "seminar", + "ct_model": "cislo" + }, + { + "codename": "view_cislo", + "ct_app_label": "seminar", + "ct_model": "cislo" + }, + { + "codename": "add_clanek", + "ct_app_label": "seminar", + "ct_model": "clanek" + }, + { + "codename": "change_clanek", + "ct_app_label": "seminar", + "ct_model": "clanek" + }, + { + "codename": "delete_clanek", + "ct_app_label": "seminar", + "ct_model": "clanek" + }, + { + "codename": "view_clanek", + "ct_app_label": "seminar", + "ct_model": "clanek" + }, + { + "codename": "add_konfera", + "ct_app_label": "seminar", + "ct_model": "konfera" + }, + { + "codename": "change_konfera", + "ct_app_label": "seminar", + "ct_model": "konfera" + }, + { + "codename": "delete_konfera", + "ct_app_label": "seminar", + "ct_model": "konfera" + }, + { + "codename": "view_konfera", + "ct_app_label": "seminar", + "ct_model": "konfera" + }, + { + "codename": "add_konfery_ucastnici", + "ct_app_label": "seminar", + "ct_model": "konfery_ucastnici" + }, + { + "codename": "change_konfery_ucastnici", + "ct_app_label": "seminar", + "ct_model": "konfery_ucastnici" + }, + { + "codename": "delete_konfery_ucastnici", + "ct_app_label": "seminar", + "ct_model": "konfery_ucastnici" + }, + { + "codename": "view_konfery_ucastnici", + "ct_app_label": "seminar", + "ct_model": "konfery_ucastnici" + }, + { + "codename": "add_nastaveni", + "ct_app_label": "seminar", + "ct_model": "nastaveni" + }, + { + "codename": "change_nastaveni", + "ct_app_label": "seminar", + "ct_model": "nastaveni" + }, + { + "codename": "delete_nastaveni", + "ct_app_label": "seminar", + "ct_model": "nastaveni" + }, + { + "codename": "view_nastaveni", + "ct_app_label": "seminar", + "ct_model": "nastaveni" + }, + { + "codename": "add_novinky", + "ct_app_label": "seminar", + "ct_model": "novinky" + }, + { + "codename": "change_novinky", + "ct_app_label": "seminar", + "ct_model": "novinky" + }, + { + "codename": "delete_novinky", + "ct_app_label": "seminar", + "ct_model": "novinky" + }, + { + "codename": "view_novinky", + "ct_app_label": "seminar", + "ct_model": "novinky" + }, + { + "codename": "add_organizator", + "ct_app_label": "seminar", + "ct_model": "organizator" + }, + { + "codename": "change_organizator", + "ct_app_label": "seminar", + "ct_model": "organizator" + }, + { + "codename": "delete_organizator", + "ct_app_label": "seminar", + "ct_model": "organizator" + }, + { + "codename": "view_organizator", + "ct_app_label": "seminar", + "ct_model": "organizator" + }, + { + "codename": "add_osoba", + "ct_app_label": "seminar", + "ct_model": "osoba" + }, + { + "codename": "change_osoba", + "ct_app_label": "seminar", + "ct_model": "osoba" + }, + { + "codename": "delete_osoba", + "ct_app_label": "seminar", + "ct_model": "osoba" + }, + { + "codename": "view_osoba", + "ct_app_label": "seminar", + "ct_model": "osoba" + }, + { + "codename": "add_pohadka", + "ct_app_label": "seminar", + "ct_model": "pohadka" + }, + { + "codename": "change_pohadka", + "ct_app_label": "seminar", + "ct_model": "pohadka" + }, + { + "codename": "delete_pohadka", + "ct_app_label": "seminar", + "ct_model": "pohadka" + }, + { + "codename": "view_pohadka", + "ct_app_label": "seminar", + "ct_model": "pohadka" + }, + { + "codename": "add_prijemce", + "ct_app_label": "seminar", + "ct_model": "prijemce" + }, + { + "codename": "change_prijemce", + "ct_app_label": "seminar", + "ct_model": "prijemce" + }, + { + "codename": "delete_prijemce", + "ct_app_label": "seminar", + "ct_model": "prijemce" + }, + { + "codename": "view_prijemce", + "ct_app_label": "seminar", + "ct_model": "prijemce" + }, + { + "codename": "add_problem", + "ct_app_label": "seminar", + "ct_model": "problem" + }, + { + "codename": "change_problem", + "ct_app_label": "seminar", + "ct_model": "problem" + }, + { + "codename": "delete_problem", + "ct_app_label": "seminar", + "ct_model": "problem" + }, + { + "codename": "view_problem", + "ct_app_label": "seminar", + "ct_model": "problem" + }, + { + "codename": "add_resitel", + "ct_app_label": "seminar", + "ct_model": "resitel" + }, + { + "codename": "change_resitel", + "ct_app_label": "seminar", + "ct_model": "resitel" + }, + { + "codename": "delete_resitel", + "ct_app_label": "seminar", + "ct_model": "resitel" + }, + { + "codename": "view_resitel", + "ct_app_label": "seminar", + "ct_model": "resitel" + }, + { + "codename": "add_rocnik", + "ct_app_label": "seminar", + "ct_model": "rocnik" + }, + { + "codename": "change_rocnik", + "ct_app_label": "seminar", + "ct_model": "rocnik" + }, + { + "codename": "delete_rocnik", + "ct_app_label": "seminar", + "ct_model": "rocnik" + }, + { + "codename": "view_rocnik", + "ct_app_label": "seminar", + "ct_model": "rocnik" + }, + { + "codename": "add_skola", + "ct_app_label": "seminar", + "ct_model": "skola" + }, + { + "codename": "change_skola", + "ct_app_label": "seminar", + "ct_model": "skola" + }, + { + "codename": "delete_skola", + "ct_app_label": "seminar", + "ct_model": "skola" + }, + { + "codename": "view_skola", + "ct_app_label": "seminar", + "ct_model": "skola" + }, + { + "codename": "add_soustredeni", + "ct_app_label": "seminar", + "ct_model": "soustredeni" + }, + { + "codename": "change_soustredeni", + "ct_app_label": "seminar", + "ct_model": "soustredeni" + }, + { + "codename": "delete_soustredeni", + "ct_app_label": "seminar", + "ct_model": "soustredeni" + }, + { + "codename": "view_soustredeni", + "ct_app_label": "seminar", + "ct_model": "soustredeni" + }, + { + "codename": "add_soustredeni_organizatori", + "ct_app_label": "seminar", + "ct_model": "soustredeni_organizatori" + }, + { + "codename": "change_soustredeni_organizatori", + "ct_app_label": "seminar", + "ct_model": "soustredeni_organizatori" + }, + { + "codename": "delete_soustredeni_organizatori", + "ct_app_label": "seminar", + "ct_model": "soustredeni_organizatori" + }, + { + "codename": "view_soustredeni_organizatori", + "ct_app_label": "seminar", + "ct_model": "soustredeni_organizatori" + }, + { + "codename": "add_soustredeni_ucastnici", + "ct_app_label": "seminar", + "ct_model": "soustredeni_ucastnici" + }, + { + "codename": "change_soustredeni_ucastnici", + "ct_app_label": "seminar", + "ct_model": "soustredeni_ucastnici" + }, + { + "codename": "delete_soustredeni_ucastnici", + "ct_app_label": "seminar", + "ct_model": "soustredeni_ucastnici" + }, + { + "codename": "view_soustredeni_ucastnici", + "ct_app_label": "seminar", + "ct_model": "soustredeni_ucastnici" + }, + { + "codename": "add_tema", + "ct_app_label": "seminar", + "ct_model": "tema" + }, + { + "codename": "change_tema", + "ct_app_label": "seminar", + "ct_model": "tema" + }, + { + "codename": "delete_tema", + "ct_app_label": "seminar", + "ct_model": "tema" + }, + { + "codename": "view_tema", + "ct_app_label": "seminar", + "ct_model": "tema" + }, + { + "codename": "add_uloha", + "ct_app_label": "seminar", + "ct_model": "uloha" + }, + { + "codename": "change_uloha", + "ct_app_label": "seminar", + "ct_model": "uloha" + }, + { + "codename": "delete_uloha", + "ct_app_label": "seminar", + "ct_model": "uloha" + }, + { + "codename": "view_uloha", + "ct_app_label": "seminar", + "ct_model": "uloha" + }, + { + "codename": "view_tag", + "ct_app_label": "taggit", + "ct_model": "tag" + }, + { + "codename": "add_taggeditem", + "ct_app_label": "taggit", + "ct_model": "taggeditem" + }, + { + "codename": "change_taggeditem", + "ct_app_label": "taggit", + "ct_model": "taggeditem" + }, + { + "codename": "delete_taggeditem", + "ct_app_label": "taggit", + "ct_model": "taggeditem" + }, + { + "codename": "view_taggeditem", + "ct_app_label": "taggit", + "ct_model": "taggeditem" + } +] \ No newline at end of file From 91b8e237c149d594b65f27ad9ae5eb9b4eaecd50 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 16 Mar 2021 23:05:20 +0100 Subject: [PATCH 10/11] =?UTF-8?q?Zapomenut=C3=A1=20pr=C3=A1va=20k=20taggit?= =?UTF-8?q?u?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin_org_prava.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/admin_org_prava.json b/admin_org_prava.json index 7f1623f7..774a2889 100644 --- a/admin_org_prava.json +++ b/admin_org_prava.json @@ -564,6 +564,21 @@ "ct_app_label": "seminar", "ct_model": "uloha" }, + { + "codename": "add_tag", + "ct_app_label": "taggit", + "ct_model": "tag" + }, + { + "codename": "change_tag", + "ct_app_label": "taggit", + "ct_model": "tag" + }, + { + "codename": "delete_tag", + "ct_app_label": "taggit", + "ct_model": "tag" + }, { "codename": "view_tag", "ct_app_label": "taggit", @@ -589,4 +604,4 @@ "ct_app_label": "taggit", "ct_model": "taggeditem" } -] \ No newline at end of file +] From 774728c4d5a0ca90ee61505e881aea97f3e44860 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 16 Mar 2021 23:41:39 +0100 Subject: [PATCH 11/11] =?UTF-8?q?Init=20se=20p=C5=99i=20migrac=C3=ADch=20n?= =?UTF-8?q?evol=C3=A1...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/forms.py | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/seminar/forms.py b/seminar/forms.py index 45d091e8..8f6950fa 100644 --- a/seminar/forms.py +++ b/seminar/forms.py @@ -391,17 +391,6 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form): return result - @classmethod - def gen_terminy_safe(cls): - "Při prvotních migracích / nasazeních webu neexistuje nastavení, takže to hodí výjimku, kterou musíme požrat..." - try: - return cls.gen_terminy() - except NotImplementedError: - return [ - ('1970-01-01', "Je to rozbitý"), - ('2012-12-12', "Svět skončil v roce 2012") - ] - @classmethod def gen_initial(cls): terminy = cls.gen_terminy() @@ -421,9 +410,9 @@ class OdevzdavatkoTabulkaFiltrForm(forms.Form): # choices jako parametr Select widgetu neumí brát callable, jen iterable, takže si pro jednoduchost můžu rovnou uložit výsledek sem... # A "sem" znamená do libovolné metody, protože jinak se jedná o kód, který django spustí při inicializaci a protože potřebujeme databázi, tak by spadnul při vyrábění testdat... self.terminy = self.gen_terminy() - self.fields['reseni_od'].widget = forms.Select(choices=self.gen_terminy_safe()) + self.fields['reseni_od'].widget = forms.Select(choices=self.gen_terminy()) self.fields['reseni_od'].initial = self.terminy[-2] - self.fields['reseni_do'].widget = forms.Select(choices=self.gen_terminy_safe()) + self.fields['reseni_do'].widget = forms.Select(choices=self.gen_terminy()) self.fields['reseni_do'].initial = self.terminy[-1] # NOTE: Initial definuji pro jednotlivé fieldy, aby to bylo tady a nebylo potřeba to řešit ve views...