--- 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')