# HG changeset patch # User cavaliet # Date 1360323178 -3600 # Node ID 333d128cc1ae2f22d0f3ab7d130b8dd8e33b4012 # Parent b20372cb23669ea21d74769522dbeef78e7d23bf optimize orm database queries. diff -r b20372cb2366 -r 333d128cc1ae src/egonomy/templates/egonomy_home.html --- 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 %} -
{% trans "Annotated by" %} {{ img.metadata.auteur }}
{% endfor %} diff -r b20372cb2366 -r 333d128cc1ae src/egonomy/views.py --- 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},