Browse Source

Merge branch 'hromadne_pridavani_uloh' into develop

okenkove_obalky
Jonas Havelka 2 years ago
parent
commit
bd6838ba62
  1. 29
      seminar/views/docasne.py

29
seminar/views/docasne.py

@ -1,5 +1,6 @@
from http import HTTPStatus from http import HTTPStatus
from django.core.exceptions import ValidationError
from django.db import transaction from django.db import transaction
from django.forms import Form, CharField, IntegerField from django.forms import Form, CharField, IntegerField
from django.views.generic import FormView from django.views.generic import FormView
@ -21,28 +22,44 @@ def problemView(request, pk):
# FIXME Tohle možná patří do forms.py # FIXME Tohle možná patří do forms.py
# FIXME Tohle není odladěné, selhává to nekontrolovaně # FIXME Chyby se ve formuláři zobrazují nějak divně
# a obecně je to fujky nekomentovaný kód
class HromadnePridaniForm(Form): class HromadnePridaniForm(Form):
""" Formulář pro hromadné přidání úložek a problémů """
tema = CharField(label="Název tématu:") tema = CharField(label="Název tématu:")
dil = IntegerField(label="Díl:", min_value=1) dil = IntegerField(label="Díl:", min_value=1)
body = CharField(label="Počty bodů (0 pro problém) oddělené čárkami:") 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): class HromadnePridaniView(FormView):
""" View pro hromadné přidání úložek a problémů """
form_class = HromadnePridaniForm form_class = HromadnePridaniForm
template_name = "generic_form.html" template_name = "generic_form.html"
success_url = 'hromadne_pridani' success_url = 'hromadne_pridani'
def get_context_data(self, **kwargs): 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 = super().get_context_data()
context["nadpis"] = "Hromadné přidání úloh" context["nadpis"] = "Hromadné přidání úloh"
context["form_url"] = "hromadne_pridani" context["form_url"] = "hromadne_pridani"
return context return context
def form_valid(self, form): def form_valid(self, form):
""" Upravený Pavlův skript na hromadné přidání úložek a problémů. """
cd = form.cleaned_data cd = form.cleaned_data
tema = cd["tema"] tema = cd["tema"]
dil = cd["dil"] dil = cd["dil"]
@ -52,10 +69,10 @@ class HromadnePridaniView(FormView):
with transaction.atomic(): with transaction.atomic():
pfx = f"{t.nazev}, díl {dil}, " 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( u = m.Uloha.objects.create(
nadproblem=t, 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, autor=t.autor,
garant=t.garant, garant=t.garant,
max_body=b, max_body=b,

Loading…
Cancel
Save