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] =?UTF-8?q?Chyt=C3=A1n=C3=AD=20chyb=20v=20hromadn=C3=A9m?= =?UTF-8?q?=20p=C5=99id=C3=A1n=C3=AD.=20Tak=C3=A9=20p=C5=99id=C3=A1ny=20ko?= =?UTF-8?q?ment=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"]