Odevzdávátko: přehled řešení pro řešitele (ošklivý)
This commit is contained in:
		
							parent
							
								
									795ab34714
								
							
						
					
					
						commit
						36c8acbbd6
					
				
					 2 changed files with 26 additions and 0 deletions
				
			
		|  | @ -173,4 +173,5 @@ urlpatterns = [ | ||||||
| 	path('temp/reseni/<int:pk>', org_required(viewMethodSwitch(get=views.DetailReseniView.as_view(), post=views.hodnoceniReseniView)), name='odevzdavatko_detail_reseni'), | 	path('temp/reseni/<int:pk>', org_required(viewMethodSwitch(get=views.DetailReseniView.as_view(), post=views.hodnoceniReseniView)), name='odevzdavatko_detail_reseni'), | ||||||
| 	path('temp/reseni/all', org_required(views.SeznamReseniView.as_view())), | 	path('temp/reseni/all', org_required(views.SeznamReseniView.as_view())), | ||||||
| 	path('temp/reseni/akt', org_required(views.SeznamAktualnichReseniView.as_view())), | 	path('temp/reseni/akt', org_required(views.SeznamAktualnichReseniView.as_view())), | ||||||
|  | 	path('temp/reseni/resitel', resitel_required(views.PrehledOdevzdanychReseni.as_view())), | ||||||
| ] | ] | ||||||
|  |  | ||||||
|  | @ -25,6 +25,8 @@ logger = logging.getLogger(__name__) | ||||||
| # 	- ReseniProblemuView | # 	- ReseniProblemuView | ||||||
| # - Detail konkrétního řešení -- všechny soubory, datum, ... | # - Detail konkrétního řešení -- všechny soubory, datum, ... | ||||||
| # 	- DetailReseniView | # 	- DetailReseniView | ||||||
|  | # - Pro řešitele: přehled jejich odevzdaných řešení | ||||||
|  | #	- PrehledOdevzdanychReseni | ||||||
| # | # | ||||||
| # Taky se může hodit: | # Taky se může hodit: | ||||||
| # - Tabulka všech řešitelů x všech problémů? | # - Tabulka všech řešitelů x všech problémů? | ||||||
|  | @ -238,6 +240,29 @@ def hodnoceniReseniView(request, pk, *args, **kwargs): | ||||||
| 	return redirect(success_url) | 	return redirect(success_url) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | class PrehledOdevzdanychReseni(ListView): | ||||||
|  | 	model = m.Hodnoceni | ||||||
|  | 	template_name = 'seminar/odevzdavatko/resitel_prehled.html' | ||||||
|  | 
 | ||||||
|  | 	def get_queryset(self): | ||||||
|  | 		if not self.request.user.is_authenticated: | ||||||
|  | 			raise RuntimeError("Uživatel měl být přihlášený!") | ||||||
|  | 		resitel = m.Resitel.objects.get(osoba__user=self.request.user) | ||||||
|  | 		qs = super().get_queryset() | ||||||
|  | 		qs = qs.filter(reseni__resitele__in=[resitel]) | ||||||
|  | 		return qs | ||||||
|  | 	 | ||||||
|  | 	def get_context_data(self, *args, **kwargs): | ||||||
|  | 		ctx = super().get_context_data(*args, **kwargs) | ||||||
|  | 		# Ročník určujeme podle čísla, do jehož deadlinu došlo řešení. | ||||||
|  | 		# Chceme to mít seřazené, takže místo comphrerehsion ručně postavíme pole polí. Django templates neumí použít OrderedDict :-/ | ||||||
|  | 		podle_rocniku = [] | ||||||
|  | 		for rocnik, hodnoceni in groupby(ctx['object_list'], lambda ho: deadline(ho.reseni.cas_doruceni)[1].rocnik): | ||||||
|  | 			podle_rocniku.append((rocnik, list(hodnoceni))) | ||||||
|  | 		ctx['podle_rocniku'] = reversed(podle_rocniku) # Od nejnovějšího ročníku | ||||||
|  | 		# TODO: Umožnit stažení / zobrazení řešení | ||||||
|  | 		return ctx | ||||||
|  | 
 | ||||||
| # Přehled všech řešení kvůli debugování | # Přehled všech řešení kvůli debugování | ||||||
| 
 | 
 | ||||||
| class SeznamReseniView(ListView): | class SeznamReseniView(ListView): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Pavel "LEdoian" Turinsky
						Pavel "LEdoian" Turinsky