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 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…
	
		Reference in a new issue