enhance term requests
authorcavaliet
Tue, 05 Nov 2013 18:03:30 +0100
changeset 174 eaea3e654cf6
parent 173 388c12f7a720
child 175 7331ecc46cba
enhance term requests
src/jocondelab/views/front_office.py
--- a/src/jocondelab/views/front_office.py	Thu Oct 31 16:33:11 2013 +0100
+++ b/src/jocondelab/views/front_office.py	Tue Nov 05 18:03:30 2013 +0100
@@ -24,24 +24,26 @@
 
 def get_terms_by_thesaurus(notices, lang):
     termsbythesaurus = {}
-    for nt in Term.objects.filter(noticeterm__notice__in=notices, dbpedia_fields=None).select_related('thesaurus__label').order_by('label').distinct():
+    for n in notices:
+        termsbythesaurus[n.pk] = {}
+    for nt in Term.objects.select_related('thesaurus__label','notices__pk').filter(noticeterm__notice__in=notices, dbpedia_fields=None).order_by('label').distinct().values("thesaurus__label", "dbpedia_uri", "label", "notices__pk"):
         term = {
-            "thesaurus": nt.thesaurus.label,
-            "dbpedia_uri": nt.dbpedia_uri,
+            "thesaurus": nt["thesaurus__label"],
+            "dbpedia_uri": nt["dbpedia_uri"],
             "translated": False,
-            "label": nt.label
+            "label": nt["label"]
         }
-        th = termsbythesaurus.setdefault(term["thesaurus"], { "translated": [], "untranslated": [] })
+        th = termsbythesaurus[nt["notices__pk"]].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__in=notices, 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','notices__pk').filter(noticeterm__notice__in=notices, dbpedia_fields__language_code=lang).order_by('dbpedia_fields__label').distinct().values("thesaurus__label", "dbpedia_uri", "dbpedia_fields__label", "notices__pk"):
         term = {
             "thesaurus": nt["thesaurus__label"],
             "dbpedia_uri": nt["dbpedia_uri"],
             "translated": True,
             "label": nt["dbpedia_fields__label"]
         }
-        th = termsbythesaurus.setdefault(term["thesaurus"], { "translated": [], "untranslated": [] })
+        th = termsbythesaurus[nt["notices__pk"]].setdefault(term["thesaurus"], { "translated": [], "untranslated": [] })
         th["translated"].append(term)
     return termsbythesaurus
 
@@ -159,8 +161,8 @@
                 "designation": " | ".join([ v for v in [ n.deno, n.appl] if v ]),
                 "image": selected_image,
                 "author": n.autr,
-                "terms_by_thesaurus": termsbythesaurus,
-                "datation": termsbythesaurus.get("PERI",{}).get("translated",[]) + termsbythesaurus.get("EPOQ",{}).get("translated",[])
+                "terms_by_thesaurus": termsbythesaurus[n.pk],
+                "datation": termsbythesaurus[n.pk].get("PERI",{}).get("translated",[]) + termsbythesaurus[n.pk].get("EPOQ",{}).get("translated",[])
             }
             noticedict['image_title'] = noticedict['title'] if noticedict['title'] else noticedict['designation']
             if show_years and n.years.exists():
@@ -195,7 +197,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)[self.object.pk]
         
         if self.show_contributions:
             cqs = self.object.contribution_set.select_related('term__dbpedia_fields')