diff options
author | Dan McGee <dan@archlinux.org> | 2012-11-12 21:37:08 -0600 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2012-11-12 21:37:08 -0600 |
commit | 92837c93acc66056391dd0b98515b89f8fc49691 (patch) | |
tree | 0c4019df6b0bf3913b8956885782f493a6049d53 /mirrors/views.py | |
parent | 2339f42ef0f95e55d99be47ed2327c3d127ebc29 (diff) |
Prefetch the available protocols on the mirror overview page
Otherwise we are doing one query per mirror, which at this point is over
100 separate queries.
Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'mirrors/views.py')
-rw-r--r-- | mirrors/views.py | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/mirrors/views.py b/mirrors/views.py index 5e374b4d..2e1e83b6 100644 --- a/mirrors/views.py +++ b/mirrors/views.py @@ -159,8 +159,16 @@ def find_mirrors_simple(request, protocol): def mirrors(request): mirror_list = Mirror.objects.select_related().order_by('tier', 'country') + protos = MirrorUrl.objects.values_list( + 'mirror_id', 'protocol__protocol').order_by( + 'mirror__id', 'protocol__protocol') if not request.user.is_authenticated(): mirror_list = mirror_list.filter(public=True, active=True) + protos = protos.filter(mirror__public=True, mirror__active=True) + protos = dict((k, list(v)) for k, v in groupby(protos, key=itemgetter(0))) + for mirror in mirror_list: + items = protos.get(mirror.id, []) + mirror.protocols = [item[1] for item in items] return render(request, 'mirrors/mirrors.html', {'mirror_list': mirror_list}) |