diff --git a/expenses_manager/expenses/templates/categories/list.html b/expenses_manager/expenses/templates/categories/list.html
index 0a40561..224af55 100644
--- a/expenses_manager/expenses/templates/categories/list.html
+++ b/expenses_manager/expenses/templates/categories/list.html
@@ -23,6 +23,7 @@
| CategorÃa |
+ Gastos |
|
@@ -30,6 +31,7 @@
{% for row in category_rows %}
| {{ row.category.name }} |
+ {{ row.category.expense_count }} |
Editar
Eliminar
@@ -37,7 +39,7 @@
|
{% empty %}
- |
+ |
No hay categorÃas
|
diff --git a/expenses_manager/expenses/tests/test_categories.py b/expenses_manager/expenses/tests/test_categories.py
index 0d6a6c2..6c9bf74 100644
--- a/expenses_manager/expenses/tests/test_categories.py
+++ b/expenses_manager/expenses/tests/test_categories.py
@@ -116,3 +116,26 @@ def test_category_list_view_returns_tree_ordered_with_depth(auth_client, user):
("Nieto", 2),
("B raiz", 0),
]
+
+
+def test_category_list_counts_only_direct_expenses(auth_client, user, account):
+ parent = Category.objects.create(name="Padre", owner=user)
+ child = Category.objects.create(name="Hija", owner=user, parent=parent)
+
+ Expense.objects.create(
+ owner=user, account=account, category=parent,
+ amount=Decimal("10"), date=date.today(),
+ )
+ for _ in range(2):
+ Expense.objects.create(
+ owner=user, account=account, category=child,
+ amount=Decimal("5"), date=date.today(),
+ )
+
+ response = auth_client.get(reverse('category_list'))
+
+ counts = {
+ row["category"].name: row["category"].expense_count
+ for row in response.context["category_rows"]
+ }
+ assert counts == {"Padre": 1, "Hija": 2}
diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py
index 4f73831..34d77ac 100644
--- a/expenses_manager/expenses/views.py
+++ b/expenses_manager/expenses/views.py
@@ -990,7 +990,11 @@ def fuel_delete(request, pk):
@login_required
def category_list(request):
- categories = Category.objects.filter(owner=request.user)
+ categories = list(
+ Category.objects.filter(owner=request.user)
+ .annotate(expense_count=Count("expenses"))
+ .select_related("parent")
+ )
if request.method == "POST":
form = CategoryForm(request.POST, user=request.user)