From 17bc54685d6a49c0289e8456f61d9d9c7481cbc1 Mon Sep 17 00:00:00 2001 From: Jean-Marie Favreau Date: Wed, 30 Oct 2024 15:23:09 +0100 Subject: [PATCH] =?UTF-8?q?Optimisation=20par=20r=C3=A9duction=20des=20req?= =?UTF-8?q?u=C3=AAtes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/agenda_culturel/models.py | 7 +++++-- src/agenda_culturel/views.py | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/agenda_culturel/models.py b/src/agenda_culturel/models.py index b9333de..1bac81d 100644 --- a/src/agenda_culturel/models.py +++ b/src/agenda_culturel/models.py @@ -1625,6 +1625,8 @@ class CategorisationRule(models.Model): blank=True, ) + rules = None + class Meta: verbose_name = _("Categorisation rule") verbose_name_plural = _("Categorisation rules") @@ -1641,9 +1643,10 @@ class CategorisationRule(models.Model): return 1 def get_category_from_rules(event): - rules = CategorisationRule.objects.all().order_by("weight", "pk") + if CategorisationRule.rules is None: + CategorisationRule.rules = CategorisationRule.objects.all().order_by("weight", "pk").prefetch_related("category").prefetch_related("place") - for rule in rules: + for rule in CategorisationRule.rules: if rule.match(event): return rule.category diff --git a/src/agenda_culturel/views.py b/src/agenda_culturel/views.py index 9dc456f..bd16a2a 100644 --- a/src/agenda_culturel/views.py +++ b/src/agenda_culturel/views.py @@ -1730,7 +1730,8 @@ def apply_categorisation_rules(request): else: # first we check if events are not correctly categorised to_categorise = [] - for e in Event.objects.filter(start_day__gte=datetime.now()).exclude(category=Category.get_default_category_id()).exclude(category=None): + events = Event.objects.filter(start_day__gte=datetime.now()).exclude(category=Category.get_default_category_id()).exclude(category=None).prefetch_related("exact_location").prefetch_related("category") + for e in events: c = CategorisationRule.get_category_from_rules(e) if c and c != e.category: to_categorise.append((e, c)) @@ -1738,7 +1739,8 @@ def apply_categorisation_rules(request): # then we apply rules on events without category nb = 0 to_save = [] - for e in Event.objects.filter(start_day__gte=datetime.now()).filter(Q(category=Category.get_default_category_id()) | Q(category=None)): + events = Event.objects.filter(start_day__gte=datetime.now()).filter(Q(category=Category.get_default_category_id()) | Q(category=None)).prefetch_related("exact_location").prefetch_related("category") + for e in events: success = CategorisationRule.apply_rules(e) if success: nb += 1