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"]