Výsledkovka čísla funkční, ale pomalá verze.
This commit is contained in:
		
							parent
							
								
									4c4d384a74
								
							
						
					
					
						commit
						5ca3b11f32
					
				
					 3 changed files with 30 additions and 24 deletions
				
			
		|  | @ -304,8 +304,9 @@ class Resitel(SeminarModelBase): | |||
| 		return sum(h.body for h in list(vsechna_hodnoceni)) | ||||
| 
 | ||||
| 
 | ||||
| 	def get_titul(self): | ||||
| 	def get_titul(self, celkove_body=None): | ||||
| 		"Vrati titul" | ||||
| 		if celkove_body is None: | ||||
| 			celkove_body = self.vsechny_body() | ||||
| 
 | ||||
| 		if celkove_body < 10: | ||||
|  | @ -898,6 +899,9 @@ class Reseni(SeminarModelBase): | |||
| 	# má OneToOneField s: | ||||
| 	# Konfera | ||||
| 
 | ||||
| 	# má ForeignKey s: | ||||
| 	# Hodnoceni | ||||
| 
 | ||||
| 	def __str__(self): | ||||
| 		return "{}({}): {}({})".format(self.resitele.first(),len(self.resitele.all()), self.problem.first() ,len(self.problem.all())) | ||||
| 		# NOTE: Potenciální DB HOG (bez select_related) | ||||
|  |  | |||
|  | @ -1,7 +1,8 @@ | |||
| {% extends "seminar/archiv/base_cisla.html" %} | ||||
| 
 | ||||
| {% block content %} | ||||
| <div> | ||||
|  {% block content %} | ||||
|  <div> | ||||
| 
 | ||||
|   <h1> | ||||
|     {% block nadpis1a %}{% block nadpis1b %} | ||||
|       Číslo {{ cislo }} | ||||
|  | @ -48,11 +49,12 @@ | |||
|   {% endif %}  | ||||
| 
 | ||||
|   {% if cislo.verejna_vysledkovka %} | ||||
|   <h2>Výsledkovka</h2> | ||||
|   <h2>Výsledkovka ({% now "jS F Y H:i" %})</h2> | ||||
| 
 | ||||
|   {% else %} | ||||
|     {% if user.is_staff %} | ||||
|       <div class='mam-org-only'> | ||||
|       <h2>Výsledkovka (neveřejná)</h2> | ||||
|       <h2>Výsledkovka (neveřejná, {% now "jS F Y H:i:s" %})</h2> | ||||
|     {% endif %} | ||||
|   {% endif %} | ||||
| 
 | ||||
|  | @ -61,27 +63,26 @@ | |||
|       <tr class='border-b'> | ||||
|         <th class='border-r'># | ||||
|         <th class='border-r'>Jméno | ||||
|         {# problémy by měly být veřejné, když je veřejná výsledkovka #} | ||||
|         {% for p in problemy %} | ||||
|         <th class='border-r'><a href="{{ p.verejne_url }}">{{ p.kod_v_rocniku }}</a> | ||||
|         {% endfor %} | ||||
|         <th class='border-r'>Za číslo</sup> | ||||
|         <th class='border-r'>Za ročník | ||||
|         {#<th class='border-r'>Odjakživa#} | ||||
|         <th class='border-r'>Odjakživa | ||||
|     {% for rv in radky_vysledkovky %} | ||||
|       <tr> | ||||
|         <td class='border-r'>{% autoescape off %}{{ rv.poradi }}{% endautoescape %} | ||||
|             <th class='border-r'> | ||||
|             {% if rv.resitel.get_titul != "" %} | ||||
|               {{ rv.resitel.get_titul }}<sup>MM</sup> | ||||
|             {% if rv.titul is not '' %} | ||||
|               {{ rv.titul }}<sup>MM</sup> | ||||
|             {% endif %} | ||||
|             {{ rv.resitel.osoba.plne_jmeno }} | ||||
|         {% for b in rv.hlavni_problemy_body %} | ||||
|         {% for b in rv.body_problemy_sezn %} | ||||
|         <td class='border-r'>{{ b }} | ||||
|         {% endfor %} | ||||
|         <td class='border-r'>{{ rv.body_cislo }} | ||||
|         <td class='border-r'><b>{{ rv.body_rocnik }}</b> | ||||
|         {# <td class='border-r'>{{ rv.body_celkem_odjakziva }}#} | ||||
|         <td class='border-r'>{{ rv.body_celkem_odjakziva }} | ||||
|       </tr> | ||||
|     {% endfor %} | ||||
|     </table> | ||||
|  | @ -91,6 +92,8 @@ | |||
|       </div> | ||||
|   {% endif %} | ||||
| 
 | ||||
|   Čas: {% now "jS F Y H:i:s" %} | ||||
| 
 | ||||
| </div>  | ||||
| {% endblock content %}  | ||||
| 
 | ||||
|  |  | |||
|  | @ -476,12 +476,12 @@ def body_resitelu_odjakziva(rocnik, resitele): | |||
| 
 | ||||
| 
 | ||||
| # Nasledující řešení je sice správné, ale moc pomalé:	 | ||||
| 	for res in Reseni.objects.prefetch_related('resitele', 'hodnoceni').all(): | ||||
| 	for res in Reseni.objects.prefetch_related('resitele', 'hodnoceni_set').all(): | ||||
| 		for r in res.resitele.all(): | ||||
| 			# daný řešitel nemusí být v naší podmnožině | ||||
| 			if r not in resitele: continue | ||||
| 			 | ||||
| 			for hodn in res.hodnoceni.all(): | ||||
| 			for hodn in res.hodnoceni_set.all(): | ||||
| 				pricti_body(body_odjakziva, r, hodn.body) | ||||
| 	return body_odjakziva | ||||
| 
 | ||||
|  | @ -493,10 +493,10 @@ def body_resitelu_za_rocnik(rocnik, aktivni_resitele): | |||
| 		body_za_rocnik[str(ar.id)] = 0 | ||||
| 	 | ||||
| 	# spočítáme body řešitelům přes všechna řešení s hodnocením v daném ročníku | ||||
| 	reseni = Reseni.objects.prefetch_related('resitele', 'hodnoceni').filter(hodnoceni__cislo_body__rocnik=rocnik) | ||||
| 	reseni = Reseni.objects.prefetch_related('resitele', 'hodnoceni_set').filter(hodnoceni__cislo_body__rocnik=rocnik) | ||||
| 	for res in reseni: | ||||
| 		for resitel in res.resitele.all(): | ||||
| 			for hodn in res.hodnoceni.all(): | ||||
| 			for hodn in res.hodnoceni_set.all(): | ||||
| 				pricti_body(body_za_rocnik, resitel, hodn.body) | ||||
| 	return body_za_rocnik | ||||
| 
 | ||||
|  | @ -651,6 +651,7 @@ class RadekVysledkovky(object): | |||
| 		self.body_celkem_odjakziva = body_odjakziva | ||||
| 		self.poradi = poradi | ||||
| 		self.body_problemy_sezn = body_problemy_sezn | ||||
| 		self.titul = resitel.get_titul(body_odjakziva) | ||||
| 	 | ||||
| 
 | ||||
| # přiřazuje danému řešiteli body do slovníku | ||||
|  | @ -713,7 +714,7 @@ class CisloView(generic.DetailView): | |||
| 				slovnik[str(ar.id)] = "" | ||||
| 		 | ||||
| 		# vezmeme všechna řešení s body do daného čísla | ||||
| 		reseni_do_cisla = Reseni.objects.prefetch_related('problem', 'hodnoceni', 'resitele').filter(hodnoceni__cislo_body=cislo) | ||||
| 		reseni_do_cisla = Reseni.objects.prefetch_related('problem', 'resitele', 'hodnoceni_set').filter(hodnoceni__cislo_body=cislo) | ||||
| 		 | ||||
| 		# projdeme všechna řešení do čísla a přičteme body každému řešiteli do celkových | ||||
| 		# bodů i do bodů za problém | ||||
|  | @ -725,7 +726,7 @@ class CisloView(generic.DetailView): | |||
| 				nadproblem_slovnik = hlavni_problemy_slovnik[str(nadproblem.id)] | ||||
| 				 | ||||
| 				# a více hodnocení | ||||
| 				for hodn in list(reseni.hodnoceni.all()): | ||||
| 				for hodn in list(reseni.hodnoceni_set.all()): | ||||
| 					body = hodn.body	 | ||||
| 					 | ||||
| 					# a více řešitelů | ||||
|  | @ -780,8 +781,6 @@ class CisloView(generic.DetailView): | |||
| 		context['problemy'] = hlavni_problemy | ||||
| #		context['v_cisle_zadane'] = TODO | ||||
| #		context['resene_problemy'] = resene_problemy | ||||
| 		#XXX nefungují body odjakživa - asi typový problém | ||||
| 		#XXX nefungují tituly - možná korelace s výše uvedeným problémem | ||||
| 		print("Předávám kontext.") | ||||
| 		return context | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Anet
						Anet