From 08e66918abecc11867b0a3000ba86fe45ef19143 Mon Sep 17 00:00:00 2001 From: Jean-Marie Favreau Date: Wed, 11 Dec 2024 18:40:38 +0100 Subject: [PATCH] =?UTF-8?q?Possibles=20am=C3=A9liorations=20de=20performan?= =?UTF-8?q?ces?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/agenda_culturel/calendar.py | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/agenda_culturel/calendar.py b/src/agenda_culturel/calendar.py index 2a5d73b..940a6b8 100644 --- a/src/agenda_culturel/calendar.py +++ b/src/agenda_culturel/calendar.py @@ -192,12 +192,13 @@ class IntervalInDay(DayInCalendar): self.id = self.id + '-' + str(id) class CalendarList: - def __init__(self, firstdate, lastdate, filter=None, exact=False, ignore_dup=None): + def __init__(self, firstdate, lastdate, filter=None, exact=False, ignore_dup=None, qs=None): self.firstdate = firstdate self.lastdate = lastdate self.now = date.today() self.filter = filter self.ignore_dup = ignore_dup + self.qs = qs if exact: self.c_firstdate = self.firstdate @@ -236,9 +237,12 @@ class CalendarList: def fill_calendar_days(self): if self.filter is None: - from .models import Event + if self.qs is None: + from .models import Event - qs = Event.objects.all() + qs = Event.objects.all() + else: + qs = self.qs else: qs = self.filter.qs @@ -246,7 +250,7 @@ class CalendarList: qs = qs.exclude(other_versions=self.ignore_dup) startdatetime = timezone.make_aware(datetime.combine(self.c_firstdate, time.min), timezone.get_default_timezone()) lastdatetime = timezone.make_aware(datetime.combine(self.c_lastdate, time.max), timezone.get_default_timezone()) - self.events = qs.filter( + qs = qs.filter( (Q(recurrence_dtend__isnull=True) & Q(recurrence_dtstart__lte=lastdatetime)) | ( Q(recurrence_dtend__isnull=False) @@ -260,7 +264,11 @@ class CalendarList: Q(other_versions__isnull=True) | Q(other_versions__representative=F('pk')) | Q(other_versions__representative__isnull=True) - ).order_by("start_time", "title__unaccent__lower").select_related("exact_location").select_related("category").select_related("other_versions").select_related("other_versions__representative") + ).order_by("start_time", "title__unaccent__lower") + + if self.qs is None: + qs = qs.select_related("exact_location").select_related("category").select_related("other_versions").select_related("other_versions__representative") + self.events = qs firstdate = datetime.fromordinal(self.c_firstdate.toordinal()) if firstdate.tzinfo is None or firstdate.tzinfo.utcoffset(firstdate) is None: @@ -315,7 +323,7 @@ class CalendarList: class CalendarMonth(CalendarList): - def __init__(self, year, month, filter): + def __init__(self, year, month, filter, qs=None): self.year = year self.month = month r = calendar.monthrange(year, month) @@ -323,7 +331,7 @@ class CalendarMonth(CalendarList): first = date(year, month, 1) last = date(year, month, r[1]) - super().__init__(first, last, filter) + super().__init__(first, last, filter, qs) def get_month_name(self): return self.firstdate.strftime("%B") @@ -336,14 +344,14 @@ class CalendarMonth(CalendarList): class CalendarWeek(CalendarList): - def __init__(self, year, week, filter): + def __init__(self, year, week, filter, qs=None): self.year = year self.week = week first = date.fromisocalendar(self.year, self.week, 1) last = date.fromisocalendar(self.year, self.week, 7) - super().__init__(first, last, filter) + super().__init__(first, last, filter, qs) def next_week(self): return self.firstdate + timedelta(days=7) @@ -353,8 +361,8 @@ class CalendarWeek(CalendarList): class CalendarDay(CalendarList): - def __init__(self, date, filter=None): - super().__init__(date, date, filter, exact=True) + def __init__(self, date, filter=None, qs=None): + super().__init__(date, date, filter=filter, qs=qs, exact=True) def get_events(self): return self.calendar_days_list()[0].events