Odevzdávátko: Nejprve vybrat téma, pak podúlohy – part 1
This commit is contained in:
		
							parent
							
								
									93fa8c6f2e
								
							
						
					
					
						commit
						ce4ee94fed
					
				
					 6 changed files with 46 additions and 2 deletions
				
			
		|  | @ -87,6 +87,10 @@ class OdevzdatelnyProblemAutocomplete(autocomplete.Select2QuerySetView): | |||
| 		if self.q: | ||||
| 			qs = qs.filter( | ||||
| 					Q(nazev__icontains=self.q)) | ||||
| 
 | ||||
| 		nadproblem_id = int(self.forwarded.get("nadproblem_id", -1)) | ||||
| 		if nadproblem_id != -1: | ||||
| 			qs = [problem for problem in qs if problem.hlavni_problem.id == nadproblem_id] | ||||
| 		return qs | ||||
| 
 | ||||
| class ProblemAutocomplete(autocomplete.Select2QuerySetView): | ||||
|  |  | |||
|  | @ -72,6 +72,7 @@ class NahrajReseniForm(forms.ModelForm): | |||
| 					attrs = {'data-placeholder--id': '-1', | ||||
| 						'data-placeholder--text' : '---', | ||||
| 						'data-allow-clear': 'true'}, | ||||
| 					forward=["nadproblem_id"], | ||||
| 				), | ||||
| 				'resitele': | ||||
| 				autocomplete.ModelSelect2Multiple( | ||||
|  | @ -82,6 +83,8 @@ class NahrajReseniForm(forms.ModelForm): | |||
| 				) | ||||
| 		} | ||||
| 
 | ||||
| 	nadproblem_id = forms.IntegerField(required=False, disabled=True, widget=forms.HiddenInput()) | ||||
| 
 | ||||
| 	def __init__(self, *args, **kwargs): | ||||
| 		super().__init__(*args, **kwargs) | ||||
| 		# FIXME Z nějakého důvodu se do této třídy dostaneme i bez resitele | ||||
|  |  | |||
|  | @ -19,7 +19,7 @@ | |||
|   {% csrf_token %} | ||||
|   <table class='form' id="reseni"> | ||||
|     <tr> | ||||
|       {% for field in form %} | ||||
|       {% for field in form.visible_fields %} | ||||
|       <td> | ||||
|         <label class="field-label{% if field.field.required %} field-required{% endif %}" for="{{ field.id_for_label }}"> | ||||
|           {{ field.label }}: | ||||
|  | @ -32,6 +32,10 @@ | |||
|     </tr> | ||||
|   </table> | ||||
| 
 | ||||
|   {% for field in form.hidden_fields %} | ||||
|     {{ field }} | ||||
|   {% endfor %} | ||||
| 
 | ||||
| 
 | ||||
| <hr> | ||||
| 
 | ||||
|  |  | |||
|  | @ -0,0 +1,21 @@ | |||
| {% extends "base.html" %} | ||||
| {% load static %} | ||||
| 
 | ||||
| {% block content %} | ||||
| <h1> | ||||
|   {% block nadpis1a %} | ||||
|     Poslat řešení | ||||
|   {% endblock %} | ||||
| </h1> | ||||
| 
 | ||||
| <h4>Seznam témat k odevzdání</h4> | ||||
| 
 | ||||
| <ul> | ||||
|   {% for problem in object_list %} | ||||
|     <li><a href="{% url 'seminar_nahraj_reseni' problem.id %}">{{ problem }}</a></li> | ||||
|   {% empty %} | ||||
|     <li>Nelze nic odevzdávat.</li> | ||||
|   {% endfor %} | ||||
| </ul> | ||||
| 
 | ||||
| {% endblock %} | ||||
|  | @ -20,7 +20,8 @@ from . import views | |||
| 
 | ||||
| urlpatterns = [ | ||||
| 	path('org/add_solution', org_required(views.PosliReseniView.as_view()), name='seminar_vloz_reseni'), | ||||
| 	path('resitel/nahraj_reseni', resitel_required(views.NahrajReseniView.as_view()), name='seminar_nahraj_reseni'), | ||||
| 	path('resitel/nahraj_reseni', resitel_required(views.NahrajReseniNadproblemView.as_view()), name='seminar_nahraj_reseni'), | ||||
| 	path('resitel/nahraj_reseni/<int:nadproblem_id>/', resitel_required(views.NahrajReseniView.as_view()), name='seminar_nahraj_reseni'), | ||||
| 	path('resitel/odevzdana_reseni/', resitel_or_org_required(views.PrehledOdevzdanychReseni.as_view()), name='seminar_resitel_odevzdana_reseni'), | ||||
| 
 | ||||
| 	path('org/reseni/', org_required(views.TabulkaOdevzdanychReseniView.as_view()), name='odevzdavatko_tabulka'), | ||||
|  |  | |||
|  | @ -381,6 +381,14 @@ class PosliReseniView(LoginRequiredMixin, FormView): | |||
| 		return data | ||||
| 
 | ||||
| 
 | ||||
| class NahrajReseniNadproblemView(LoginRequiredMixin, ListView): | ||||
| 	model = m.Problem | ||||
| 	template_name = 'odevzdavatko/nahraj_reseni_nadproblem.html' | ||||
| 
 | ||||
| 	def get_queryset(self): | ||||
| 		return super().get_queryset().filter(nadproblem__isnull=True) | ||||
| 
 | ||||
| 
 | ||||
| class NahrajReseniView(LoginRequiredMixin, CreateView): | ||||
| 	model = m.Reseni | ||||
| 	template_name = 'odevzdavatko/nahraj_reseni.html' | ||||
|  | @ -399,6 +407,9 @@ class NahrajReseniView(LoginRequiredMixin, CreateView): | |||
| 			}) | ||||
| 		return super().get(request, *args, **kwargs) | ||||
| 
 | ||||
| 	def get_initial(self): | ||||
| 		return {"nadproblem_id": self.kwargs["nadproblem_id"]} | ||||
| 
 | ||||
| 	def get_context_data(self,**kwargs): | ||||
| 		data = super().get_context_data(**kwargs) | ||||
| 		if self.request.POST: | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue