# HG changeset patch # User cavaliet # Date 1383671010 -3600 # Node ID eaea3e654cf6d2c31a5a6cd3f5c3ab84dc328a7b # Parent 388c12f7a7201a84bd70492c6b9f630fbcb52ac7 enhance term requests diff -r 388c12f7a720 -r eaea3e654cf6 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')