From 3bcc6d315258b89e1287626137e081c741eeccb3 Mon Sep 17 00:00:00 2001 From: Jens Gutermuth Date: Mon, 23 Mar 2015 02:22:35 +0100 Subject: [PATCH] Loanding pins does no N+1 queries anymore This saves another three queries per pin, bringing to total query count down to 8. See issue #85 . --- pinry/core/api.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pinry/core/api.py b/pinry/core/api.py index 334c019..9590f9b 100644 --- a/pinry/core/api.py +++ b/pinry/core/api.py @@ -1,3 +1,4 @@ +from django.core.exceptions import ObjectDoesNotExist from tastypie import fields from tastypie.authorization import DjangoAuthorization from tastypie.constants import ALL, ALL_WITH_RELATIONS @@ -59,7 +60,10 @@ class UserResource(ModelResource): def filter_generator_for(size): def wrapped_func(bundle, **kwargs): - return bundle.obj.get_by_size(size) + for thumbnail in bundle.obj._prefetched_objects_cache['thumbnail']: + if thumbnail.size == size: + return thumbnail + raise DoesNotExist() return wrapped_func @@ -136,7 +140,7 @@ class PinResource(ModelResource): 'submitter': ALL_WITH_RELATIONS } queryset = Pin.objects.all().select_related('submitter'). \ - prefetch_related('image', 'tags') + prefetch_related('image__thumbnail_set', 'tags') resource_name = 'pin' include_resource_uri = False always_return_data = True