Merge branch 'data_migrations' of gimli.ms.mff.cuni.cz:/akce/mam/git/mamweb into data_migrations
This commit is contained in:
		
						commit
						6cfde792c0
					
				
					 1 changed files with 6 additions and 30 deletions
				
			
		|  | @ -407,36 +407,12 @@ def hlavni_problemy_cisla(cislo): | |||
| 
 | ||||
| # vrátí slovník řešitel:body obsahující počty bodů zadaných řešitelů za daný ročník | ||||
| def body_resitelu_odjakziva(rocnik, resitele): | ||||
| 	body_odjakziva = {} | ||||
| 
 | ||||
| 	for r in resitele: | ||||
| 		body_odjakziva[r.id] = 0 | ||||
| ######################################################################### | ||||
| # POZOR! Aktuálně počítá jen za posledních 10 let od zadaného ročníku   # | ||||
| ######################################################################### | ||||
| 	# Body za posledních 10 let je dobrá aproximace pro naše potřeby (výsledkovka | ||||
| 	# s aktivními řešiteli) | ||||
|          | ||||
| 	#body_pred_roky = [] | ||||
| 	#rok = rocnik.prvni_rok | ||||
| 	#rocniky = Rocnik.objects.filter(prvni_rok__gt=rok-11) | ||||
| 	#for roc in rocniky:	 | ||||
| 	#	body_pred_roky.append(body_resitelu_za_rocnik(roc, resitele)) | ||||
|         # | ||||
| 	#for r in resitele: | ||||
| 	#	for i in range(0,10): | ||||
| 	#		body_odjakziva[r.id] += body_pred_roky[i][r.id] | ||||
| 
 | ||||
| 
 | ||||
| # Nasledující řešení je sice správné, ale moc pomalé: | ||||
| # (důsledek toho, že dotazy na joinování databázových tabulek jsou kvadratické) | ||||
| 	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_set.all(): | ||||
| 				pricti_body(body_odjakziva, r, hodn.body) | ||||
| 	# Následující řádek přidá ke každému řešiteli údaj ".body" se součtem jejich bodů | ||||
| 	resitele_s_body = Resitel.objects.annotate(body=Sum('reseni__hodnoceni__body')) | ||||
| 	# Teď jen z QuerySetu řešitelů anotovaných body vygenerujeme slovník indexovaný řešitelským id obsahující body | ||||
| 	# ... ale jen ro řešitele, které dostaneme jako parametr. | ||||
| 	# TODO: Zjistit, co ten parametr říká a proč je potřeba | ||||
| 	body_odjakziva = {int(res.id) : res.body for res in resitele_s_body if res in resitele} | ||||
| 	return body_odjakziva | ||||
| 
 | ||||
| # vrátí slovník řešitel:body obsahující počty bodů zadaných řešitelů za daný ročník | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Anet
						Anet