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