diff --git a/odevzdavatko/forms.py b/odevzdavatko/forms.py
index 65a8b7ac..804cfde5 100644
--- a/odevzdavatko/forms.py
+++ b/odevzdavatko/forms.py
@@ -1,7 +1,6 @@
from django import forms
from dal import autocomplete
-from django.forms import formset_factory
-from django.forms.models import inlineformset_factory
+from django.forms.models import modelformset_factory, inlineformset_factory
from django.utils import timezone
from seminar.models import Resitel
@@ -85,19 +84,14 @@ ReseniSPrilohamiFormSet = inlineformset_factory(m.Reseni,m.PrilohaReseni,
)
-class JednoHodnoceniForm(forms.ModelForm):
- class Meta:
- model = m.Hodnoceni
- fields = ('problem', 'body', 'deadline_body', 'feedback',)
- widgets = {
- 'problem': autocomplete.ModelSelect2(
- url='autocomplete_problem',
- ),
+HodnoceniFormSet = modelformset_factory(
+ m.Hodnoceni,
+ fields=('id', 'problem', 'body', 'deadline_body', 'feedback',),
+ extra=0,
+ widgets={
+ 'problem': autocomplete.ModelSelect2(url='autocomplete_problem',),
'feedback': forms.Textarea(attrs={'rows': 1, 'cols': 30, 'class': 'feedback'}),
- }
-
-OhodnoceniReseniFormSet = formset_factory(JednoHodnoceniForm,
- extra = 0,
+ },
)
class PoznamkaReseniForm(forms.ModelForm):
diff --git a/odevzdavatko/templates/odevzdavatko/detail.html b/odevzdavatko/templates/odevzdavatko/detail.html
index a3f986d5..c7c53440 100644
--- a/odevzdavatko/templates/odevzdavatko/detail.html
+++ b/odevzdavatko/templates/odevzdavatko/detail.html
@@ -112,6 +112,7 @@ $(document).ready(function(){
|
+ {{ subform.id }}
{% endfor %}
diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py
index 3428edaa..995b5840 100644
--- a/odevzdavatko/views.py
+++ b/odevzdavatko/views.py
@@ -221,9 +221,8 @@ class DetailReseniView(DetailView):
def get_context_data(self, **kw):
reseni = get_object_or_404(m.Reseni, id=self.kwargs['pk'])
- initial = m.Hodnoceni.objects.filter(reseni=reseni).values('problem', 'body', 'deadline_body', 'feedback',)
ctx = super().get_context_data(**kw)
- ctx['form'] = f.OhodnoceniReseniFormSet(initial=initial)
+ ctx['form'] = f.HodnoceniFormSet(queryset=m.Hodnoceni.objects.filter(reseni=reseni))
ctx['poznamka_form'] = f.PoznamkaReseniForm(instance=reseni)
return ctx
@@ -231,34 +230,18 @@ class DetailReseniView(DetailView):
def hodnoceniReseniView(request, pk, *args, **kwargs):
reseni = get_object_or_404(m.Reseni, pk=pk)
template_name = 'odevzdavatko/detail.html'
- form_class = f.OhodnoceniReseniFormSet
+ form_class = f.HodnoceniFormSet
success_url = reverse('odevzdavatko_detail_reseni', kwargs={'pk': pk})
- # 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
- formset = f.OhodnoceniReseniFormSet(request.POST)
+ hodnoceni_formset = f.HodnoceniFormSet(request.POST, queryset=m.Hodnoceni.objects.filter(reseni=reseni))
poznamka_form = f.PoznamkaReseniForm(request.POST, instance=reseni)
# TODO: Napsat validaci formuláře a formsetu
- if not (formset.is_valid() and poznamka_form.is_valid()):
- raise ValueError(formset.errors, poznamka_form.errors)
+ if not (hodnoceni_formset.is_valid() and poznamka_form.is_valid()):
+ raise ValueError(hodnoceni_formset.errors, poznamka_form.errors)
with transaction.atomic():
- # Poznámka je jednoduchá na zpracování:
- poznamka_form.save()
-
- # Smažeme všechna dosavadní hodnocení tohoto řešení
- qs = m.Hodnoceni.objects.filter(reseni=reseni)
- logger.info(f"Will delete {qs.count()} objects: {qs}")
- qs.delete()
-
- # Vyrobíme nová podle formsetu
- for form in formset:
- hodnoceni = m.Hodnoceni(
- reseni=reseni,
- **form.cleaned_data,
- )
- logger.info(f"Creating Hodnoceni: {hodnoceni}")
- hodnoceni.save()
+ if poznamka_form.has_changed(): poznamka_form.save()
+ if hodnoceni_formset.has_changed(): hodnoceni_formset.save()
return redirect(success_url)