diff --git a/pinry/core/api.py b/pinry/core/api.py index 56a4b21..958d59c 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,13 @@ class UserResource(ModelResource): def filter_generator_for(size): def wrapped_func(bundle, **kwargs): - return bundle.obj.get_by_size(size) + if hasattr(bundle.obj, '_prefetched_objects_cache') and 'thumbnail' in bundle.obj._prefetched_objects_cache: + for thumbnail in bundle.obj._prefetched_objects_cache['thumbnail']: + if thumbnail.size == size: + return thumbnail + raise ObjectDoesNotExist() + else: + return bundle.obj.get_by_size(size) return wrapped_func @@ -135,7 +142,8 @@ class PinResource(ModelResource): filtering = { 'submitter': ALL_WITH_RELATIONS } - queryset = Pin.objects.all() + queryset = Pin.objects.all().select_related('submitter', 'image'). \ + prefetch_related('image__thumbnail_set', 'tags') resource_name = 'pin' include_resource_uri = False always_return_data = True