From 6dcd53b68ffbce5f48ab2a512e629dd6d8cf598b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Fri, 22 Jul 2022 17:46:23 +0200 Subject: [PATCH 1/2] =?UTF-8?q?enumerate(...,1)=20m=C3=ADsto=20+1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/docasne.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/seminar/views/docasne.py b/seminar/views/docasne.py index d13c0016..0a9931e3 100644 --- a/seminar/views/docasne.py +++ b/seminar/views/docasne.py @@ -52,10 +52,10 @@ class HromadnePridaniView(FormView): with transaction.atomic(): pfx = f"{t.nazev}, díl {dil}, " - for k, b in enumerate(body): + for k, b in enumerate(body, 1): u = m.Uloha.objects.create( nadproblem=t, - nazev=pfx + f"{'úloha' if b > 0 else 'problém'} {k + 1}", + nazev=pfx + f"{'úloha' if b > 0 else 'problém'} {k}", autor=t.autor, garant=t.garant, max_body=b, From 769a6d2deec9acb855f4bbb81eb9a6f737c42b0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Fri, 22 Jul 2022 18:05:50 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Chyt=C3=A1n=C3=AD=20chyb=20v=20hromadn?= =?UTF-8?q?=C3=A9m=20p=C5=99id=C3=A1n=C3=AD.=20Tak=C3=A9=20p=C5=99id=C3=A1?= =?UTF-8?q?ny=20koment=C3=A1=C5=99e.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/views/docasne.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/seminar/views/docasne.py b/seminar/views/docasne.py index 0a9931e3..108360f5 100644 --- a/seminar/views/docasne.py +++ b/seminar/views/docasne.py @@ -1,5 +1,6 @@ from http import HTTPStatus +from django.core.exceptions import ValidationError from django.db import transaction from django.forms import Form, CharField, IntegerField from django.views.generic import FormView @@ -21,28 +22,44 @@ def problemView(request, pk): # FIXME Tohle možná patří do forms.py -# FIXME Tohle není odladěné, selhává to nekontrolovaně -# a obecně je to fujky nekomentovaný kód +# FIXME Chyby se ve formuláři zobrazují nějak divně class HromadnePridaniForm(Form): + """ Formulář pro hromadné přidání úložek a problémů """ + tema = CharField(label="Název tématu:") dil = IntegerField(label="Díl:", min_value=1) body = CharField(label="Počty bodů (0 pro problém) oddělené čárkami:") + def clean_tema(self): + """ Kontrola, že `tema` je název právě jednoho tématu """ + if m.Tema.objects.filter( + nazev__exact=self.cleaned_data['tema'], + nadproblem=None).count() != 1: + raise ValidationError("Špatný nebo nepřesně zadaný název témátka") + + def clean_body(self): + """ Kontrola, že `body` je seznam čísel """ + try: + list(map(int, self.cleaned_data["body"].split(","))) + except ValueError: + raise ValidationError("Špatný formát bodů") + -# FIXME Tohle není odladěné, selhává to nekontrolovaně -# a obecně je to fujky nekomentovaný kód class HromadnePridaniView(FormView): + """ View pro hromadné přidání úložek a problémů """ form_class = HromadnePridaniForm template_name = "generic_form.html" success_url = 'hromadne_pridani' def get_context_data(self, **kwargs): + """ Přidání nadpisu stránky a url, kam se má poslat formulář. """ context = super().get_context_data() context["nadpis"] = "Hromadné přidání úloh" context["form_url"] = "hromadne_pridani" return context def form_valid(self, form): + """ Upravený Pavlův skript na hromadné přidání úložek a problémů. """ cd = form.cleaned_data tema = cd["tema"] dil = cd["dil"]