Prednasky: v aktuálních výsledcích jen aktuální výsledky

This commit is contained in:
LEdoian 2019-03-18 00:34:37 +01:00
parent 5db763f2cb
commit bd92068b37

View file

@ -3,7 +3,7 @@ from django.shortcuts import render, get_object_or_404
from django.views import generic from django.views import generic
from django.shortcuts import HttpResponseRedirect from django.shortcuts import HttpResponseRedirect
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Sum from django.db.models import Sum, Subquery
from prednasky.models import Prednaska, Hlasovani, Seznam, STAV_NAVRH from prednasky.models import Prednaska, Hlasovani, Seznam, STAV_NAVRH
from seminar.models import Soustredeni from seminar.models import Soustredeni
@ -55,9 +55,14 @@ class SeznamListView(generic.ListView):
def get_queryset(self): def get_queryset(self):
self.seznam = get_object_or_404(Seznam, id=self.kwargs["seznam"]) self.seznam = get_object_or_404(Seznam, id=self.kwargs["seznam"])
# Od "annotate" je to hack opsaný ze stack overflow, kterým se filtrují
# jen výsledky z aktuálního seznamu. Dosud se zobrazoval součet bodů u
# přednášky od počátku historie.
# TODO: udělat lépe (Django 2 má Sum s filtrem)
prednasky = Prednaska.objects.filter(seznamy=self.seznam).order_by( prednasky = Prednaska.objects.filter(seznamy=self.seznam).order_by(
'org__user__first_name', 'org__user__last_name' 'org__user__first_name', 'org__user__last_name'
).annotate(body=Sum('hlasovani__body')) ).annotate(body=Subquery(Hlasovani.objects.filter(seznam=self.seznam)
.values('body').annotate(b=Sum('body')).values('b')))
return prednasky return prednasky