optimize orm database queries.
authorcavaliet
Fri, 08 Feb 2013 12:32:58 +0100
changeset 29 333d128cc1ae
parent 28 b20372cb2366
child 30 a96a795aa08f
optimize orm database queries.
src/egonomy/templates/egonomy_home.html
src/egonomy/views.py
--- a/src/egonomy/templates/egonomy_home.html	Thu Feb 07 11:56:23 2013 +0100
+++ b/src/egonomy/templates/egonomy_home.html	Fri Feb 08 12:32:58 2013 +0100
@@ -46,7 +46,7 @@
 	                             {% endif %}
 	                             {% endwith %}
                                 </div>
-                                <h3>{{ img.metadata.titre }} : {{img.date_modif}}</h3></a>
+                                <h3>{{ img.metadata.titre }}</h3></a>
                                 <p>{% trans "Annotated by" %} <strong>{{ img.metadata.auteur }}</strong></p>
                             </li>
                           {% endfor %}
--- 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},