Fix: 0.5 · #1237
This commit is contained in:
		
							parent
							
								
									0d17b45011
								
							
						
					
					
						commit
						062653e708
					
				
					 5 changed files with 32 additions and 1 deletions
				
			
		|  | @ -22,6 +22,7 @@ urlpatterns = [ | ||||||
| 	# Autocomplete | 	# Autocomplete | ||||||
| 	path('api/autocomplete/skola/', views.SkolaAutocomplete.as_view(), name='autocomplete_skola'), | 	path('api/autocomplete/skola/', views.SkolaAutocomplete.as_view(), name='autocomplete_skola'), | ||||||
| 	path('api/autocomplete/resitel/', org_required(views.ResitelAutocomplete.as_view()), name='autocomplete_resitel'), | 	path('api/autocomplete/resitel/', org_required(views.ResitelAutocomplete.as_view()), name='autocomplete_resitel'), | ||||||
|  | 	path('api/autocomplete/resitel_public/', views.PublicResitelAutocomplete.as_view(), name='autocomplete_resitel_public'), | ||||||
| 	path('api/autocomplete/problem/odevzdatelny', views.OdevzdatelnyProblemAutocomplete.as_view(), name='autocomplete_problem_odevzdatelny'), | 	path('api/autocomplete/problem/odevzdatelny', views.OdevzdatelnyProblemAutocomplete.as_view(), name='autocomplete_problem_odevzdatelny'), | ||||||
| 
 | 
 | ||||||
| 	# Ceka na autocomplete v3 | 	# Ceka na autocomplete v3 | ||||||
|  |  | ||||||
|  | @ -44,6 +44,26 @@ class ResitelAutocomplete(LoginRequiredAjaxMixin,autocomplete.Select2QuerySetVie | ||||||
| 			qs = qs.filter(query) | 			qs = qs.filter(query) | ||||||
| 		return qs | 		return qs | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | class PublicResitelAutocomplete(LoginRequiredAjaxMixin, autocomplete.Select2QuerySetView): | ||||||
|  | 	""" | ||||||
|  | 		View k :mod:`dal.autocomplete` pro vyhledávání řešitelů podle přezdívky | ||||||
|  | 		především v odevzdávátku. | ||||||
|  | 	""" | ||||||
|  | 	def get_queryset(self): | ||||||
|  | 		qs = m.Resitel.objects.filter( | ||||||
|  | 			prezdivka_resitele__isnull=False | ||||||
|  | 		).exclude( | ||||||
|  | 			prezdivka_resitele="" | ||||||
|  | 		).filter( | ||||||
|  | 			prezdivka_resitele__startswith=self.q | ||||||
|  | 		).all() | ||||||
|  | 		return qs | ||||||
|  | 
 | ||||||
|  | 	def get_result_label(self, result): | ||||||
|  | 		return result.prezdivka_resitele | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class OdevzdatelnyProblemAutocomplete(autocomplete.Select2QuerySetView): | class OdevzdatelnyProblemAutocomplete(autocomplete.Select2QuerySetView): | ||||||
| 	""" View k :mod:`dal.autocomplete` pro vyhledávání problémů především v odevzdávátku. """ | 	""" View k :mod:`dal.autocomplete` pro vyhledávání problémů především v odevzdávátku. """ | ||||||
| 	def get_queryset(self): | 	def get_queryset(self): | ||||||
|  |  | ||||||
|  | @ -63,7 +63,7 @@ class PosliReseniForm(forms.Form): | ||||||
| class NahrajReseniForm(forms.ModelForm): | class NahrajReseniForm(forms.ModelForm): | ||||||
| 	class Meta: | 	class Meta: | ||||||
| 		model = m.Reseni | 		model = m.Reseni | ||||||
| 		fields = ('problem',) | 		fields = ('problem', 'resitele') | ||||||
| 		help_texts = {'problem':''} # Nezobrazovat help text ve formuláři | 		help_texts = {'problem':''} # Nezobrazovat help text ve formuláři | ||||||
| 		 | 		 | ||||||
| 		widgets = {'problem': | 		widgets = {'problem': | ||||||
|  | @ -72,6 +72,13 @@ class NahrajReseniForm(forms.ModelForm): | ||||||
| 					attrs = {'data-placeholder--id': '-1', | 					attrs = {'data-placeholder--id': '-1', | ||||||
| 						'data-placeholder--text' : '---', | 						'data-placeholder--text' : '---', | ||||||
| 						'data-allow-clear': 'true'}, | 						'data-allow-clear': 'true'}, | ||||||
|  | 				), | ||||||
|  | 				'resitele': | ||||||
|  | 				autocomplete.ModelSelect2Multiple( | ||||||
|  | 					url='autocomplete_resitel_public', | ||||||
|  | 					attrs = {'data-placeholder--id': '-1', | ||||||
|  | 						'data-placeholder--text' : '---', | ||||||
|  | 						'data-allow-clear': 'true'}, | ||||||
| 				) | 				) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -13,6 +13,8 @@ | ||||||
| 
 | 
 | ||||||
| <p style="text-align: justify">Když řešení různých témátek vložíš každé zvlášť, lépe se v nich vyznáme a třeba ti je i rychleji opravíme.</p> | <p style="text-align: justify">Když řešení různých témátek vložíš každé zvlášť, lépe se v nich vyznáme a třeba ti je i rychleji opravíme.</p> | ||||||
| 
 | 
 | ||||||
|  |   <p>Pokud řešíte ve více lidech, je <b>nutné</b> přidat tyto lidi jako „Autory řešení“! V tomto poli se vyhledává podle přezdívek, které si lze nastavit v „Osobní údaje“. Sebe vyplňovat nemusíte a za skupinu odevzdávejte pouze <b>jednou</b> (ne každý sám)!</p> | ||||||
|  | 
 | ||||||
| <form enctype="multipart/form-data" action="{% url 'seminar_nahraj_reseni' %}" method="post" onsubmit="return zkontroluj_prilohy();"> | <form enctype="multipart/form-data" action="{% url 'seminar_nahraj_reseni' %}" method="post" onsubmit="return zkontroluj_prilohy();"> | ||||||
|   {% csrf_token %} |   {% csrf_token %} | ||||||
|   <table class='form' id="reseni"> |   <table class='form' id="reseni"> | ||||||
|  |  | ||||||
|  | @ -407,6 +407,7 @@ class NahrajReseniView(LoginRequiredMixin, CreateView): | ||||||
| 		with transaction.atomic(): | 		with transaction.atomic(): | ||||||
| 			self.object = form.save() | 			self.object = form.save() | ||||||
| 			self.object.resitele.add(m.Resitel.objects.get(osoba__user = self.request.user)) | 			self.object.resitele.add(m.Resitel.objects.get(osoba__user = self.request.user)) | ||||||
|  | 			self.object.resitele.add(*form.cleaned_data["resitele"]) | ||||||
| 			self.object.cas_doruceni = timezone.now() | 			self.object.cas_doruceni = timezone.now() | ||||||
| 			self.object.forma = m.Reseni.FORMA_UPLOAD | 			self.object.forma = m.Reseni.FORMA_UPLOAD | ||||||
| 			self.object.save() | 			self.object.save() | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue