db request optimisation for list of notices
authorcavaliet
Thu, 31 Oct 2013 16:33:11 +0100
changeset 173 388c12f7a720
parent 172 14fb2c397f17
child 174 eaea3e654cf6
db request optimisation for list of notices
src/jocondelab/views/front_office.py
--- a/src/jocondelab/views/front_office.py	Thu Oct 31 12:43:07 2013 +0100
+++ b/src/jocondelab/views/front_office.py	Thu Oct 31 16:33:11 2013 +0100
@@ -22,9 +22,9 @@
 import logging
 logger = logging.getLogger(__name__)
 
-def get_terms_by_thesaurus(notice, lang):
+def get_terms_by_thesaurus(notices, lang):
     termsbythesaurus = {}
-    for nt in Term.objects.filter(noticeterm__notice=notice, dbpedia_fields=None).select_related('thesaurus__label').order_by('label').distinct():
+    for nt in Term.objects.filter(noticeterm__notice__in=notices, dbpedia_fields=None).select_related('thesaurus__label').order_by('label').distinct():
         term = {
             "thesaurus": nt.thesaurus.label,
             "dbpedia_uri": nt.dbpedia_uri,
@@ -34,7 +34,7 @@
         th = termsbythesaurus.setdefault(term["thesaurus"], { "translated": [], "untranslated": [] })
         th["untranslated"].append(term)
     # We use "values" because it avoids an other db request for dbpedia_fields.get(language_code = lang).label
-    for nt in Term.objects.select_related('thesaurus__label,dbpedia_fields').filter(noticeterm__notice=notice, dbpedia_fields__language_code=lang).order_by('dbpedia_fields__label').distinct().values("thesaurus__label", "dbpedia_uri", "dbpedia_fields__label"):
+    for nt in Term.objects.select_related('thesaurus__label,dbpedia_fields').filter(noticeterm__notice__in=notices, dbpedia_fields__language_code=lang).order_by('dbpedia_fields__label').distinct().values("thesaurus__label", "dbpedia_uri", "dbpedia_fields__label"):
         term = {
             "thesaurus": nt["thesaurus__label"],
             "dbpedia_uri": nt["dbpedia_uri"],
@@ -144,8 +144,9 @@
             context["page_count"] = paginator.num_pages
         
         notices = []
+        termsbythesaurus = get_terms_by_thesaurus(ns, lang)
         for n in ns:
-            termsbythesaurus = get_terms_by_thesaurus(n, lang)
+            #termsbythesaurus = get_terms_by_thesaurus(n, lang)
             # select first image with "_p.jpg"
             selected_image = None
             for i in n.images.all():
@@ -194,7 +195,7 @@
         
         context["images"] = [settings.JOCONDE_IMG_BASE_URL + i.url for i in self.object.images.exclude(relative_url__endswith='v.jpg').order_by('id')]
         context["title"] = self.object.titr if self.object.titr else self.object.deno
-        context["terms_by_thesaurus"] = get_terms_by_thesaurus(self.object, lang)
+        context["terms_by_thesaurus"] = get_terms_by_thesaurus([self.object], lang)
         
         if self.show_contributions:
             cqs = self.object.contribution_set.select_related('term__dbpedia_fields')