From c229da1436361b8d9f128f7021e5a8ad2427710b Mon Sep 17 00:00:00 2001 From: Nachou-u Date: Wed, 9 Sep 2026 08:26:36 -0300 Subject: [PATCH] MEJORA: Fix N+1 query problems in project_list and export_expenses_csv --- expenses/models.py | 2 ++ expenses/views.py | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/expenses/models.py b/expenses/models.py index 6e0cc8f..58cac8a 100644 --- a/expenses/models.py +++ b/expenses/models.py @@ -83,6 +83,8 @@ class Project(CatalogModel): @property def total_expenses_clp(self): + if hasattr(self, 'total_expenses'): + return self.total_expenses or Decimal('0.00') return self.expenses.aggregate(total=models.Sum('amount_clp'))['total'] or Decimal('0.00') @property diff --git a/expenses/views.py b/expenses/views.py index 321a98c..9a90757 100644 --- a/expenses/views.py +++ b/expenses/views.py @@ -1,5 +1,8 @@ import csv import io +import logging + +logger = logging.getLogger(__name__) from decimal import Decimal from django.views.generic import ListView, CreateView, UpdateView, DeleteView from django.contrib.auth.mixins import LoginRequiredMixin @@ -353,7 +356,7 @@ def export_expenses_csv(request): 'Responsable', 'Detalle', 'Region', 'Comuna', 'Proveedor' ]) - expenses = Expense.objects.all().select_related('project', 'responsible_person') + expenses = Expense.objects.all().select_related('project', 'responsible_person', 'vendor') for exp in expenses: writer.writerow([ exp.id, @@ -870,8 +873,8 @@ def delete_document(request, pk): try: if os.path.exists(doc.file.path): os.remove(doc.file.path) - except Exception: - pass + except Exception as e: + logger.error(f"Error removing file: {e}", exc_info=True) # Delete object doc.delete()