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 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"]
@ -52,10 +69,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,

Loading…
Cancel
Save