From 8b0626139036e50396f14cf9ae39b12e2540af85 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Fri, 19 Jan 2018 20:48:58 +0100 Subject: Préchargement des groupes et des salles lorsqu’on demande la liste des salles. Réduit le nombre de requêtes à effectuer ainsi que le temps de traitement. --- models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index 4903b11..ae04fb8 100644 --- a/models.py +++ b/models.py @@ -178,7 +178,8 @@ class CourseManager(Manager): qs = qs.filter(groups__in=Group.objects.get_parents(obj), **criteria) \ .prefetch_related("rooms") elif isinstance(obj, Room): - qs = qs.filter(rooms__in=(obj,), **criteria) + qs = qs.filter(rooms__in=(obj,), **criteria) \ + .prefetch_related("groups", "rooms") else: raise(TypeError, "obj must be a Group or a Room") -- cgit v1.2.1 From 046e92137ace30cd645ba0f42421c283a60ba0cd Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Fri, 19 Jan 2018 21:31:35 +0100 Subject: N’affiche plus la liste des groupes dans l’emploi du temps des salles si un cours n’en a pas, au lieu de se baser sur le nombre de salles d’un cours pour faire ce choix. Suppression du préchargement des salles lorsqu’on demande les cours d’une salle. Cela permet de réduire le nombre de requêtes effectuées. --- models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index ae04fb8..15f378a 100644 --- a/models.py +++ b/models.py @@ -31,6 +31,7 @@ class SlugModel(models.Model): super(SlugModel, self).save() + class Meta: abstract = True @@ -179,7 +180,7 @@ class CourseManager(Manager): .prefetch_related("rooms") elif isinstance(obj, Room): qs = qs.filter(rooms__in=(obj,), **criteria) \ - .prefetch_related("groups", "rooms") + .prefetch_related("groups") else: raise(TypeError, "obj must be a Group or a Room") -- cgit v1.2.1 From a0101b9a7566b5296c3490ce3592984976553807 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 20 Jan 2018 22:28:21 +0100 Subject: On cache les groupes qui n’ont plus de cours La requête est assez longue à s’effectuer sur SQLite, mais pas sur PostgreSQL --- models.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index 15f378a..c122bfd 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 Manager, Q +from django.db.models import Count, Manager, OuterRef, Q, Subquery from django.db.models.functions import ExtractWeek, ExtractYear from django.utils import timezone from django.utils.text import slugify @@ -104,6 +104,13 @@ class GroupManager(Manager): mention=group.mention, source=group.source) + def get_relevant_groups(self, start, **criteria): + courses = Course.objects.filter(groups=OuterRef("pk"), begin__gte=start) \ + .only("pk")[:1] + return self.get_queryset().annotate(c=Subquery(courses, + output_field=models.IntegerField())) \ + .filter(c__isnull=False, **criteria).order_by("name") + class Group(SlugModel): objects = GroupManager() -- cgit v1.2.1 From 8ad4a03f9d6ab6d218ddcbe277ca3766f05f6d79 Mon Sep 17 00:00:00 2001 From: Alban Gruin Date: Sat, 20 Jan 2018 17:24:18 +0100 Subject: Légère optimisation de la page des groupes --- models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'models.py') diff --git a/models.py b/models.py index c122bfd..b809a53 100644 --- a/models.py +++ b/models.py @@ -200,7 +200,8 @@ class CourseManager(Manager): .annotate(year=ExtractYear("begin"), week=ExtractWeek("begin")) \ .values("groups__mention", "groups__semester", - "groups__subgroup", "year", "week") + "groups__subgroup", "year", "week") \ + .annotate(c=Count("*")) class Course(models.Model): -- cgit v1.2.1