aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlban Gruin2017-11-24 23:43:53 +0100
committerAlban Gruin2017-11-24 23:57:04 +0100
commitadad24ace9ab47f12d43dca494b358544beefa00 (patch)
tree59951ec1051200d34165e23a355cf24b5f46aa1a
parentd9b78963e8526b803f1165c79ae2f97c6a36016b (diff)
Correction d’un crash lorsqu’un groupe a des enfants ayant une mention différente.
L’annotation Count() renvoie plusieurs valeurs différentes, alors que Subquery n’en accepte qu’une seule. Corrigé en rajoutant une valeur statique (0) par annotation et en regroupant en se basant sur cette valeur.
-rw-r--r--models.py5
1 files changed, 3 insertions, 2 deletions
diff --git a/models.py b/models.py
index 14270cf..40406e3 100644
--- a/models.py
+++ b/models.py
@@ -16,7 +16,7 @@
from functools import reduce
from django.db import models
-from django.db.models import Count, Manager, Q, Subquery
+from django.db.models import Count, Manager, Q, Subquery, Value
from django.db.models.expressions import OuterRef
from django.db.models.functions import ExtractWeek, ExtractYear
from django.utils import timezone
@@ -86,7 +86,8 @@ class GroupManager(Manager):
sub = self.get_queryset().filter(timetable=timetable,
mention__startswith=OuterRef("mention"),
subgroup__startswith=OuterRef("subgroup")) \
- .order_by().values("mention").annotate(c=Count("*")).values("c")
+ .annotate(v=Value(0)).values("v") \
+ .annotate(c=Count("v")).values("c") # fuck Count()
return self.get_queryset().filter(*args, timetable=timetable, hidden=False, **criteria) \
.annotate(nbsub=Subquery(sub, output_field=models.IntegerField())) \