summaryrefslogtreecommitdiff
path: root/todolists/views.py
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2010-09-09 13:36:41 -0500
committerDan McGee <dan@archlinux.org>2010-09-09 13:36:41 -0500
commiteaa76ae7584d0938db0298714303e2c23b3eacfd (patch)
tree11857ecc060b36b345f4b824b9d55b3cd6872cce /todolists/views.py
parentffdf7fec992592255ae2f08ba4db3e4962daf279 (diff)
Improve todo list view page
Add total package count and incomplete package count columns. Also reduce the number of total queries by killing the query per row that was happening before. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'todolists/views.py')
-rw-r--r--todolists/views.py15
1 files changed, 12 insertions, 3 deletions
diff --git a/todolists/views.py b/todolists/views.py
index e3663331..25186243 100644
--- a/todolists/views.py
+++ b/todolists/views.py
@@ -4,6 +4,7 @@ from django.http import HttpResponse
from django.core.mail import send_mail
from django.shortcuts import get_object_or_404, redirect
from django.contrib.auth.decorators import login_required, permission_required
+from django.db.models import Count
from django.views.decorators.cache import never_cache
from django.views.generic.create_update import delete_object
from django.views.generic.simple import direct_to_template
@@ -53,10 +54,18 @@ def view(request, listid):
@login_required
@never_cache
def list(request):
- lists = Todolist.objects.select_related('creator').order_by('-date_added')
+ lists = Todolist.objects.select_related('creator').annotate(
+ pkg_count=Count('todolistpkg')).order_by('-date_added')
+ incomplete = Todolist.objects.filter(todolistpkg__complete=False).annotate(
+ Count('todolistpkg')).values_list('id', 'todolistpkg__count')
+
+ # tag each list with an incomplete package count
+ lookup = {}
+ for k, v in incomplete:
+ lookup[k] = v
for l in lists:
- l.complete = TodolistPkg.objects.filter(
- list=l.id,complete=False).count() == 0
+ l.incomplete_count = lookup.get(l.id, 0)
+
return direct_to_template(request, 'todolists/list.html', {'lists': lists})
@permission_required('main.add_todolist')