Upgrade odevzdavatka #30
					 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