Admin | Vylepseno zverejnovani cisel.
Vsechny problematicke problemy se zobrazi naraz. Cislo lze zverejnit vcetne problemu pomoci akce z admina.
This commit is contained in:
		
							parent
							
								
									d257c1858a
								
							
						
					
					
						commit
						c6e6a54760
					
				
					 1 changed files with 34 additions and 6 deletions
				
			
		|  | @ -8,6 +8,7 @@ from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModel | |||
| from reversion.admin import VersionAdmin | ||||
| from django_reverse_admin import ReverseModelAdmin | ||||
| from solo.admin import SingletonModelAdmin | ||||
| from django.utils.safestring import mark_safe | ||||
| 
 | ||||
| 
 | ||||
| # Todo: reversion | ||||
|  | @ -25,31 +26,58 @@ class CisloForm(ModelForm): | |||
| 		fields = '__all__' | ||||
| 	 | ||||
| 	def clean(self): | ||||
| 		print("Cleaning...") | ||||
| 		print(self.cleaned_data) | ||||
| 		if self.cleaned_data.get('verejne_db') == False: | ||||
| 			return self.cleaned_data | ||||
| 		cn = m.CisloNode.objects.get(cislo=self.instance) | ||||
| 		errors = [] | ||||
| 		for ch in tl.all_children(cn): | ||||
| 			if isinstance(ch, m.TemaVCisleNode): | ||||
| 				if ch.tema.stav not in \ | ||||
| 					(m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): | ||||
| 						raise ValidationError('Téma %(tema)s není zadané ani vyřešené', params={'tema':ch.tema}) | ||||
| 					errors.append(ValidationError('Téma %(tema)s není zadané ani vyřešené', params={'tema':ch.tema})) | ||||
| 				 | ||||
| 			if isinstance(ch, m.UlohaZadaniNode) or isinstance(ch, m.UlohaVzorakNode): | ||||
| 				if ch.uloha.stav not in \ | ||||
| 					(m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): | ||||
| 					raise ValidationError('Úloha %(uloha)s není zadaná ani vyřešená', params={'uloha':ch.uloha}) | ||||
| 					errors.append(ValidationError('Úloha %(uloha)s není zadaná ani vyřešená', params={'uloha':ch.uloha})) | ||||
| 			if isinstance(ch, m.ReseniNode): | ||||
| 				for problem in ch.reseni.problem_set: | ||||
| 					if problem not in \ | ||||
| 						(m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): | ||||
| 						raise ValidationError('Problém %s není zadaný ani vyřešený', code=problem) | ||||
| 						errors.append(ValidationError('Problém %s není zadaný ani vyřešený', code=problem)) | ||||
| 		if errors: | ||||
| 			errors.append(ValidationError(mark_safe('<b>Pokud chceš učinit všechny problémy, co nejsou zadané ani vyřešené, zadanými a číslo zveřejnit, můžeš to udělat pomocí akce v <a href="/admin/seminar/cislo">seznamu čísel</a></b>'))) | ||||
| 			raise ValidationError(errors) | ||||
| 		return self.cleaned_data | ||||
| 
 | ||||
| 
 | ||||
| @admin.register(m.Cislo) | ||||
| class CisloAdmin(admin.ModelAdmin): | ||||
| 	form = CisloForm | ||||
| 	actions = ['force_publish'] | ||||
| 
 | ||||
| 	def force_publish(self,request,queryset): | ||||
| 		for cislo in queryset: | ||||
| 			cn = m.CisloNode.objects.get(cislo=cislo) | ||||
| 			for ch in tl.all_children(cn): | ||||
| 				if isinstance(ch, m.TemaVCisleNode): | ||||
| 					if ch.tema.stav not in (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): | ||||
| 						ch.tema.stav = m.Problem.STAV_ZADANY | ||||
| 						ch.tema.save() | ||||
| 					 | ||||
| 				if isinstance(ch, m.UlohaZadaniNode) or isinstance(ch, m.UlohaVzorakNode): | ||||
| 					if ch.uloha.stav not in (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): | ||||
| 						ch.uloha.stav = m.Problem.STAV_ZADANY | ||||
| 						ch.uloha.save() | ||||
| 				if isinstance(ch, m.ReseniNode): | ||||
| 					for problem in ch.reseni.problem_set: | ||||
| 						if problem not in (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): | ||||
| 							problem.stav = m.Problem.STAV_ZADANY | ||||
| 							problem.save() | ||||
| 			cislo.verejne_db = True | ||||
| 			cislo.save() | ||||
| 
 | ||||
| 	force_publish.short_description = 'Zveřejnit vybraná čísla a všechny návrhy úloh v nich učinit zadanými' | ||||
| 
 | ||||
| @admin.register(m.Osoba) | ||||
| class OsobaAdmin(admin.ModelAdmin): | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue