Merge branch 'hromadne_pridavani_uloh' into develop
This commit is contained in:
commit
bd6838ba62
1 changed files with 23 additions and 6 deletions
|
@ -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…
Reference in a new issue