--- a/src/egonomy/views.py Thu Feb 07 11:56:23 2013 +0100
+++ b/src/egonomy/views.py Fri Feb 08 12:32:58 2013 +0100
@@ -5,7 +5,9 @@
from django.template import RequestContext
from models import Image, Fragment
from django.db.models.aggregates import Max
+import logging
+logger = logging.getLogger(__name__)
def home(request):
@@ -19,9 +21,11 @@
if "field" in request.GET:
field = request.GET["field"]
-
- img_list = Image.objects.annotate(date_modif=Max('fragment__date_saved')).exclude(date_modif=None).order_by('-date_modif')[:12]
- frg_list = Fragment.objects.all().order_by('-date_saved')[:12]
+ # We force list() because if not, img_id_list is a valuelistqueryset and not a list of values.
+ # We separate image requests and make requests with select_related to optimize database hits.
+ img_id_list = list(Image.objects.values_list('id', flat=True).annotate(date_modif=Max('fragment__date_saved')).exclude(date_modif=None).order_by('-date_modif')[:12])
+ img_list = Image.objects.filter(id__in=img_id_list).select_related('info', 'metadata')
+ frg_list = Fragment.objects.all().order_by('-date_saved').select_related('image', 'image__info', 'image__metadata','author')[:12]
return render_to_response("egonomy_home.html",
{'img_list':img_list, 'fragment_list':frg_list, "search":search, "nb_results":nb_results},