summaryrefslogtreecommitdiff
path: root/todolists/utils.py
blob: 94f39f7140353b897048e5b8d5c2d963c4525c12 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from django.db.models import Count

from main.models import Todolist


def get_annotated_todolists(incomplete_only=False):
    qs = Todolist.objects.all()
    lists = qs.select_related('creator').defer(
            'creator__email', 'creator__password', 'creator__is_staff',
            'creator__is_active', 'creator__is_superuser',
            'creator__last_login', 'creator__date_joined').annotate(
            pkg_count=Count('todolistpkg')).order_by('-date_added')
    incomplete = qs.filter(todolistpkg__complete=False).annotate(
            Count('todolistpkg')).values_list('id', 'todolistpkg__count')

    lookup = dict(incomplete)

    if incomplete_only:
        lists = lists.filter(id__in=lookup.keys())

    # tag each list with an incomplete package count
    for todolist in lists:
        todolist.incomplete_count = lookup.get(todolist.id, 0)

    return lists

# vim: set ts=4 sw=4 et: