# HG changeset patch # User cavaliet # Date 1383233591 -3600 # Node ID 388c12f7a7201a84bd70492c6b9f630fbcb52ac7 # Parent 14fb2c397f17e3d16ced10959d28bb6e1fb93dba db request optimisation for list of notices diff -r 14fb2c397f17 -r 388c12f7a720 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')