From adad24ace9ab47f12d43dca494b358544beefa00 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Fri, 24 Nov 2017 23:43:53 +0100 Subject: 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. --- models.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'models.py') 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())) \ -- cgit v1.2.1