Browse Source

Upravitelná poznámka

middleware_test
Pavel "LEdoian" Turinsky 3 years ago
parent
commit
69c0bce38a
  1. 5
      seminar/forms.py
  2. 7
      seminar/templates/seminar/odevzdavatko/detail.html
  3. 11
      seminar/views/odevzdavatko.py

5
seminar/forms.py

@ -316,6 +316,11 @@ OhodnoceniReseniFormSet = formset_factory(JednoHodnoceniForm,
extra = 0, extra = 0,
) )
class PoznamkaReseniForm(forms.ModelForm):
class Meta:
model = m.Reseni
fields = ('poznamka',)
# FIXME: Ideálně by mělo být součástí třídy níž, ale neumím to udělat # FIXME: Ideálně by mělo být součástí třídy níž, ale neumím to udělat
DATE_FORMAT = '%Y-%m-%d' DATE_FORMAT = '%Y-%m-%d'

7
seminar/templates/seminar/odevzdavatko/detail.html

@ -85,15 +85,14 @@ $(document).ready(function(){
<p>Žádné přílohy</p> <p>Žádné přílohy</p>
{% endif %} {% endif %}
<form method=post>
{# Poznámka #} {# Poznámka #}
{% if object.poznamka %}
<h3>Poznámka:</h3> <h3>Poznámka:</h3>
{{ object.poznamka }} <p>{{ poznamka_form.poznamka }}</p>
{% endif %}
{# Hodnocení: #} {# Hodnocení: #}
<h3>Hodnocení:</h3> <h3>Hodnocení:</h3>
<form method=post><table> <table>
{% csrf_token %} {% csrf_token %}
{{ form.management_form }} {{ form.management_form }}
</table> </table>

11
seminar/views/odevzdavatko.py

@ -206,9 +206,9 @@ class DetailReseniView(DetailView):
template_name = 'seminar/odevzdavatko/detail.html' template_name = 'seminar/odevzdavatko/detail.html'
def aktualni_hodnoceni(self): def aktualni_hodnoceni(self):
reseni = get_object_or_404(m.Reseni, id=self.kwargs['pk']) self.reseni = get_object_or_404(m.Reseni, id=self.kwargs['pk'])
result = [] # Slovníky s klíči problem, body, cislo_body -- initial data pro f.OhodnoceniReseniFormSet result = [] # Slovníky s klíči problem, body, cislo_body -- initial data pro f.OhodnoceniReseniFormSet
for hodn in m.Hodnoceni.objects.filter(reseni=reseni): for hodn in m.Hodnoceni.objects.filter(reseni=self.reseni):
result.append( result.append(
{"problem": hodn.problem, {"problem": hodn.problem,
"body": hodn.body, "body": hodn.body,
@ -221,6 +221,7 @@ class DetailReseniView(DetailView):
ctx['form'] = f.OhodnoceniReseniFormSet( ctx['form'] = f.OhodnoceniReseniFormSet(
initial = self.aktualni_hodnoceni() initial = self.aktualni_hodnoceni()
) )
ctx['poznamka_form'] = f.PoznamkaReseniForm(instance=self.reseni)
return ctx return ctx
@ -233,10 +234,14 @@ def hodnoceniReseniView(request, pk, *args, **kwargs):
# FIXME: Použit initial i tady a nebastlit hodnocení tak nízkoúrovňově # FIXME: Použit initial i tady a nebastlit hodnocení tak nízkoúrovňově
# Also: https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/#django.forms.ModelForm # Also: https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/#django.forms.ModelForm
formset = f.OhodnoceniReseniFormSet(request.POST) formset = f.OhodnoceniReseniFormSet(request.POST)
poznamka_form = f.PoznamkaReseniForm(request.POST, instance=reseni)
# TODO: Napsat validaci formuláře a formsetu # TODO: Napsat validaci formuláře a formsetu
# TODO: Implementovat větev, kdy formulář validní není. # TODO: Implementovat větev, kdy formulář validní není.
if formset.is_valid(): if formset.is_valid() and poznamka_form.is_valid():
with transaction.atomic(): with transaction.atomic():
# Poznámka je jednoduchá na zpracování:
poznamka_form.save()
# Smažeme všechna dosavadní hodnocení tohoto řešení # Smažeme všechna dosavadní hodnocení tohoto řešení
qs = m.Hodnoceni.objects.filter(reseni=reseni) qs = m.Hodnoceni.objects.filter(reseni=reseni)
logger.info(f"Will delete {qs.count()} objects: {qs}") logger.info(f"Will delete {qs.count()} objects: {qs}")

Loading…
Cancel
Save