diff --git a/expenses_manager/expenses/templates/expenses/tag_list.html b/expenses_manager/expenses/templates/expenses/tag_list.html
index 1291ade..163870f 100644
--- a/expenses_manager/expenses/templates/expenses/tag_list.html
+++ b/expenses_manager/expenses/templates/expenses/tag_list.html
@@ -5,15 +5,34 @@
➕ Nueva etiqueta
-
- {% for tag in tags %}
- -
- {{ tag.name }}
- Editar
- Eliminar
-
- {% empty %}
- - No hay etiquetas
- {% endfor %}
-
-{% endblock %}
\ No newline at end of file
+
+
+
+
+ | Nombre |
+ Gastos |
+ |
+
+
+
+ {% for tag in tags %}
+
+ | {{ tag.name }} |
+ {{ tag.expense_count }} |
+
+ Editar
+ Eliminar
+ |
+
+ {% empty %}
+
+ |
+ No hay etiquetas
+ Añade la primera
+ |
+
+ {% endfor %}
+
+
+
+{% endblock %}
diff --git a/expenses_manager/expenses/tests/test_tags.py b/expenses_manager/expenses/tests/test_tags.py
new file mode 100644
index 0000000..f915286
--- /dev/null
+++ b/expenses_manager/expenses/tests/test_tags.py
@@ -0,0 +1,23 @@
+import pytest
+from datetime import date
+from decimal import Decimal
+from django.urls import reverse
+from expenses.models import Expense, Tag
+
+pytestmark = pytest.mark.django_db
+
+
+def test_tag_list_annotates_expense_usage_count(auth_client, user, account, category):
+ used = Tag.objects.create(owner=user, name="Usada")
+ unused = Tag.objects.create(owner=user, name="Sin usar")
+
+ for _ in range(2):
+ expense = Expense.objects.create(
+ owner=user, account=account, category=category, amount=Decimal("10"), date=date.today()
+ )
+ expense.tags.add(used)
+
+ response = auth_client.get(reverse('tag_list'))
+
+ counts = {tag.name: tag.expense_count for tag in response.context["tags"]}
+ assert counts == {"Usada": 2, "Sin usar": 0}
diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py
index f297875..a24ffc9 100644
--- a/expenses_manager/expenses/views.py
+++ b/expenses_manager/expenses/views.py
@@ -15,7 +15,7 @@ from .forms import (
)
from django.core.paginator import Paginator
-from django.db.models import Sum, ProtectedError
+from django.db.models import Sum, Count, ProtectedError
from django.db.models.functions import ExtractMonth, ExtractYear, ExtractDay
from django.contrib.auth.decorators import login_required
@@ -635,7 +635,11 @@ def dashboard(request):
@login_required
def tag_list(request):
- tags = Tag.objects.filter(owner=request.user)
+ tags = (
+ Tag.objects.filter(owner=request.user)
+ .annotate(expense_count=Count("expenses"))
+ .order_by("name")
+ )
return render(
request, "expenses/tag_list.html", {"active_menu": "settings", "tags": tags}