From aaabb405227638ca44eef65ac272ef1bfbfbe085 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Mon, 4 Nov 2024 12:36:41 +0100 Subject: [PATCH] Clean up --- default | 0 django_pg_rrule/managers.py | 42 +++++++------------------------------ 2 files changed, 8 insertions(+), 34 deletions(-) create mode 100644 default diff --git a/default b/default new file mode 100644 index 0000000..e69de29 diff --git a/django_pg_rrule/managers.py b/django_pg_rrule/managers.py index 0b7f346..17e8a09 100644 --- a/django_pg_rrule/managers.py +++ b/django_pg_rrule/managers.py @@ -18,8 +18,8 @@ class RecurrenceManager(CTEManager): def with_occurrences( self, - start: datetime | None = None, - end: datetime | None = None, + start: datetime, + end: datetime, start_qs: Q | None = None, additional_filter: Q | None = None, select_related: Sequence | None = None, @@ -81,7 +81,7 @@ class RecurrenceManager(CTEManager): function="get_occurrences", output_field=DateTimeField(), ), - F("rdates"), + Cast("rdates", output_field=ArrayField(DateTimeField())), function="ARRAY_CAT", output_field=ArrayField(DateTimeField()), ), @@ -100,7 +100,7 @@ class RecurrenceManager(CTEManager): with_qs.only("id"), name="qodatetimes", ) - cte_query = ( # Join WITH clause with actual data + qs = ( # Join WITH clause with actual data cte.join(self.model, id=cte.col.id) .with_cte(cte) # Annotate WITH clause @@ -117,40 +117,14 @@ class RecurrenceManager(CTEManager): ) ) - # single_events_qs = start_qs.filter( - # rrule__isnull=True, - # ) - # - # if additional_filter: - # single_events_qs = single_events_qs.filter(additional_filter) - # - # single_events_qs = single_events_qs.filter( - # Q( - # **{ - # f"{self.datetime_start_field}__lte": end, - # f"{self.datetime_end_field}__gte": start, - # } - # ) - # | Q( - # **{ - # f"{self.date_start_field}__lte": end.date(), - # f"{self.date_end_field}__gte": start.date(), - # } - # ) - # ).annotate( - # odatetime=F(self.datetime_start_field), odate=F(self.date_start_field) - # ) - if select_related: - cte_query = cte_query.select_related(*select_related) - # single_events_qs = single_events_qs.select_related(*select_related) + qs = qs.select_related(*select_related) if prefetch_related: - cte_query = cte_query.prefetch_related(*prefetch_related) - # single_events_qs = single_events_qs.prefetch_related(*prefetch_related) + qs = qs.prefetch_related(*prefetch_related) - # qs = (cte_query).union(single_events_qs) - qs = cte_query + # Hacky way to enforce RIGHT OUTER JOIN + # Otherwise, Django always will rewrite the join_type to LEFT OUTER JOIN/INNER JOIN qs.query.alias_map["qodatetimes"].join_type = "RIGHT OUTER JOIN" return qs -- GitLab