Browse Source

Chytání chyb v hromadném přidání. Také přidány komentáře.

okenkove_obalky
Jonas Havelka 2 years ago
parent
commit
769a6d2dee
  1. 25
      seminar/views/docasne.py

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

Loading…
Cancel
Save