On optimise la requête

on avait pleeein d'événements non récurrents mais récupérés comme tels
This commit is contained in:
Jean-Marie Favreau 2025-02-02 20:14:16 +01:00
parent 471bd08cd1
commit 9b4f10c1c0

View File

@ -256,15 +256,19 @@ class CalendarList:
startdatetime = timezone.make_aware(datetime.combine(self.c_firstdate, time.min), timezone.get_default_timezone()) 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()) lastdatetime = timezone.make_aware(datetime.combine(self.c_lastdate, time.max), timezone.get_default_timezone())
qs = qs.filter( qs = qs.filter(
(Q(recurrence_dtend__isnull=True) & Q(recurrence_dtstart__lte=lastdatetime)) (Q(recurrences__isnull=False) &
| ( (Q(recurrence_dtend__isnull=True) & Q(recurrence_dtstart__isnull=False) & Q(recurrence_dtstart__lte=lastdatetime))
Q(recurrence_dtend__isnull=False) | (
& ~( Q(recurrence_dtend__isnull=False)
Q(recurrence_dtstart__gt=lastdatetime) & ~(
| Q(recurrence_dtend__lt=startdatetime) Q(recurrence_dtstart__gt=lastdatetime)
| Q(recurrence_dtend__lt=startdatetime)
)
) )
) )
| (Q(start_day__lte=self.c_lastdate) & ((Q(end_day__isnull=True) & Q(start_day__gte=self.c_firstdate)) | Q(end_day__gte=self.c_firstdate))) | (Q(start_day__lte=self.c_lastdate) & # start before the end of the desired period
((Q(end_day__isnull=True) & Q(start_day__gte=self.c_firstdate)) # end after the begining of desired period
| (Q(end_day__isnull=False) & Q(end_day__gte=self.c_firstdate))))
).filter( ).filter(
Q(other_versions__isnull=True) | Q(other_versions__isnull=True) |
Q(other_versions__representative=F('pk')) | Q(other_versions__representative=F('pk')) |