forms | Pridan prototyp formulare na odevzdavani reseni.
This commit is contained in:
parent
aaee03497d
commit
a674d837ae
4 changed files with 94 additions and 1 deletions
|
@ -3,7 +3,8 @@ from dal import autocomplete
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from .models import Skola, Resitel, Osoba
|
from .models import Skola, Resitel, Osoba, Problem
|
||||||
|
import seminar.models as m
|
||||||
|
|
||||||
from datetime import date
|
from datetime import date
|
||||||
import logging
|
import logging
|
||||||
|
@ -210,3 +211,47 @@ class EditForm(forms.Form):
|
||||||
# self.add_error('skola_nazev',forms.ValidationError('Je nutné vyplnit název školy'))
|
# self.add_error('skola_nazev',forms.ValidationError('Je nutné vyplnit název školy'))
|
||||||
# elif data.get('skola_adresa')=='':
|
# elif data.get('skola_adresa')=='':
|
||||||
# self.add_error('skola_adresa',forms.ValidationError('Je nutné vyplnit adresu školy'))
|
# self.add_error('skola_adresa',forms.ValidationError('Je nutné vyplnit adresu školy'))
|
||||||
|
|
||||||
|
class VlozReseniForm(forms.Form):
|
||||||
|
#FIXME jen podproblémy daného problému
|
||||||
|
problem = forms.ModelChoiceField(label='Problém',queryset=m.Problem.objects.all())
|
||||||
|
# to_field_name
|
||||||
|
#problem = models.ManyToManyField(Problem, verbose_name='problém', help_text='Problém',
|
||||||
|
# through='Hodnoceni')
|
||||||
|
|
||||||
|
# FIXME pridat vice resitelu
|
||||||
|
resitel = forms.ModelChoiceField(label="Řešitel",
|
||||||
|
queryset=Resitel.objects.all(),
|
||||||
|
widget=autocomplete.ModelSelect2(
|
||||||
|
url='autocomplete_resitel',
|
||||||
|
attrs = {'data-placeholder--id': '-1',
|
||||||
|
'data-placeholder--text' : '---',
|
||||||
|
'data-allow-clear': 'true'})
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
#resitele = models.ManyToManyField(Resitel, verbose_name='autoři řešení',
|
||||||
|
# help_text='Seznam autorů řešení', through='Reseni_Resitele')
|
||||||
|
|
||||||
|
cas_doruceni = forms.DateField(label="Čas doručení")
|
||||||
|
|
||||||
|
#cas_doruceni = models.DateTimeField('čas_doručení', default=timezone.now, blank=True)
|
||||||
|
|
||||||
|
forma = forms.ChoiceField(label="Forma řešení",choices = m.Reseni.FORMA_CHOICES)
|
||||||
|
#forma = models.CharField('forma řešení', max_length=16, choices=FORMA_CHOICES, blank=False,
|
||||||
|
# default=FORMA_EMAIL)
|
||||||
|
|
||||||
|
poznamka = forms.CharField(label='Neveřejná poznámka')
|
||||||
|
#poznamka = models.TextField('neveřejná poznámka', blank=True,
|
||||||
|
# help_text='Neveřejná poznámka k řešení (plain text)')
|
||||||
|
|
||||||
|
#TODO body do cisla
|
||||||
|
#TODO prilohy
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(VlozReseniForm, self).__init__(*args, **kwargs)
|
||||||
|
#self.fields['favorite_color'] = forms.ChoiceField(choices=[(color.id, color.name) for color in Resitel.objects.all()])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
17
seminar/templates/seminar/org/vloz_reseni.html
Normal file
17
seminar/templates/seminar/org/vloz_reseni.html
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{% extends "seminar/zadani/base.html" %}
|
||||||
|
{% load staticfiles %}
|
||||||
|
{% block script %}
|
||||||
|
<!--script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.js' %}"></script!-->
|
||||||
|
{{form.media}}
|
||||||
|
<script src="{% static 'seminar/prihlaska.js' %}"></script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>
|
||||||
|
{% block nadpis1a %}{% block nadpis1b %}
|
||||||
|
Přihláška do semináře
|
||||||
|
{% endblock %}{% endblock %}
|
||||||
|
</h1>
|
||||||
|
{{form.as_p}}
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -108,12 +108,17 @@ urlpatterns = [
|
||||||
path('auth/logout/', views.LogoutView.as_view(), name='logout'),
|
path('auth/logout/', views.LogoutView.as_view(), name='logout'),
|
||||||
path('auth/resitel/', views.ResitelView.as_view(), name='seminar_resitel'),
|
path('auth/resitel/', views.ResitelView.as_view(), name='seminar_resitel'),
|
||||||
path('autocomplete/skola/',views.SkolaAutocomplete.as_view(), name='autocomplete_skola'),
|
path('autocomplete/skola/',views.SkolaAutocomplete.as_view(), name='autocomplete_skola'),
|
||||||
|
path('autocomplete/resitel/',views.ResitelAutocomplete.as_view(), name='autocomplete_resitel'),
|
||||||
path('auth/reset_password/', views.PasswordResetView.as_view(), name='reset_password'),
|
path('auth/reset_password/', views.PasswordResetView.as_view(), name='reset_password'),
|
||||||
path('auth/change_password/', views.PasswordChangeView.as_view(), name='change_password'),
|
path('auth/change_password/', views.PasswordChangeView.as_view(), name='change_password'),
|
||||||
path('auth/reset_password_done/', views.PasswordResetDoneView.as_view(), name='reset_password_done'),
|
path('auth/reset_password_done/', views.PasswordResetDoneView.as_view(), name='reset_password_done'),
|
||||||
path('auth/reset_password_confirm/<uidb64>/<token>/', views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
|
path('auth/reset_password_confirm/<uidb64>/<token>/', views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
|
||||||
path('auth/reset_password_complete/', views.PasswordResetCompleteView.as_view(), name='reset_password_complete'),
|
path('auth/reset_password_complete/', views.PasswordResetCompleteView.as_view(), name='reset_password_complete'),
|
||||||
path('auth/resitel_edit', views.resitelEditView, name='seminar_resitel_edit'),
|
path('auth/resitel_edit', views.resitelEditView, name='seminar_resitel_edit'),
|
||||||
|
|
||||||
|
|
||||||
|
path('temp/add_solution', views.AddSolutionView.as_view()),
|
||||||
|
|
||||||
path('', views.TitulniStranaView.as_view(), name='titulni_strana'),
|
path('', views.TitulniStranaView.as_view(), name='titulni_strana'),
|
||||||
|
|
||||||
# Ceka na autocomplete v3
|
# Ceka na autocomplete v3
|
||||||
|
|
|
@ -9,6 +9,7 @@ from django.utils.translation import ugettext as _
|
||||||
from django.http import Http404,HttpResponseBadRequest,HttpResponseRedirect
|
from django.http import Http404,HttpResponseBadRequest,HttpResponseRedirect
|
||||||
from django.db.models import Q, Sum, Count
|
from django.db.models import Q, Sum, Count
|
||||||
from django.views.decorators.csrf import ensure_csrf_cookie
|
from django.views.decorators.csrf import ensure_csrf_cookie
|
||||||
|
from django.views.generic.edit import FormView
|
||||||
from django.contrib.auth import authenticate, login, get_user_model, logout
|
from django.contrib.auth import authenticate, login, get_user_model, logout
|
||||||
from django.contrib.auth import views as auth_views
|
from django.contrib.auth import views as auth_views
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
@ -22,6 +23,7 @@ from .models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Orga
|
||||||
from . import utils
|
from . import utils
|
||||||
from .unicodecsv import UnicodeWriter
|
from .unicodecsv import UnicodeWriter
|
||||||
from .forms import PrihlaskaForm, LoginForm, EditForm
|
from .forms import PrihlaskaForm, LoginForm, EditForm
|
||||||
|
import seminar.forms as f
|
||||||
|
|
||||||
from datetime import timedelta, date, datetime
|
from datetime import timedelta, date, datetime
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
@ -1123,6 +1125,11 @@ class ResitelView(LoginRequiredMixin,generic.DetailView):
|
||||||
return Resitel.objects.get(osoba__user=self.request.user)
|
return Resitel.objects.get(osoba__user=self.request.user)
|
||||||
|
|
||||||
## Formulare
|
## Formulare
|
||||||
|
class AddSolutionView(LoginRequiredMixin, FormView):
|
||||||
|
template_name = 'seminar/org/vloz_reseni.html'
|
||||||
|
form_class = f.VlozReseniForm
|
||||||
|
success_url = '/'
|
||||||
|
|
||||||
def resetPasswordView(request):
|
def resetPasswordView(request):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -1297,6 +1304,25 @@ class SkolaAutocomplete(autocomplete.Select2QuerySetView):
|
||||||
|
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
|
class LoginRequiredAjaxMixin(object):
|
||||||
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
#if request.is_ajax() and not request.user.is_authenticated: # Pokud to otevřu jako stránku, tak se omezení neuplatní, takže to asi nechceme
|
||||||
|
if not request.user.is_authenticated:
|
||||||
|
return JsonResponse(data={'results': [], 'pagination': {}}, status=401)
|
||||||
|
return super(LoginRequiredAjaxMixin, self).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
class ResitelAutocomplete(LoginRequiredAjaxMixin,autocomplete.Select2QuerySetView):
|
||||||
|
def get_queryset(self):
|
||||||
|
qs = Resitel.objects.all()
|
||||||
|
if self.q:
|
||||||
|
qs = qs.filter(
|
||||||
|
Q(osoba__jmeno__startswith=self.q)|
|
||||||
|
Q(osoba__prijmeni__startswith=self.q)|
|
||||||
|
Q(osoba__prezdivka__startswith=self.q)
|
||||||
|
)
|
||||||
|
return qs
|
||||||
|
|
||||||
|
|
||||||
# Ceka na autocomplete v3
|
# Ceka na autocomplete v3
|
||||||
# class OrganizatorAutocomplete(autocomplete.Select2QuerySetView):
|
# class OrganizatorAutocomplete(autocomplete.Select2QuerySetView):
|
||||||
# def get_queryset(self):
|
# def get_queryset(self):
|
||||||
|
|
Loading…
Reference in a new issue