updated view for data migration
authorveltr
Tue, 20 Aug 2013 12:27:34 +0200
changeset 95 b0ea2dcff0ce
parent 94 5fde1070d998
child 96 eca960eac58b
updated view for data migration
src/jocondelab/views/front_office.py
--- a/src/jocondelab/views/front_office.py	Mon Aug 19 18:57:01 2013 +0200
+++ b/src/jocondelab/views/front_office.py	Tue Aug 20 12:27:34 2013 +0200
@@ -5,8 +5,8 @@
 @author: rvelt
 '''
 
-from core.models import Notice
-from jocondelab.models import DbpediaResource, DbpediaTranslation
+from core.models import (Notice, Thesaurus)
+from jocondelab.models import DbpediaFields
 from django.conf import settings
 from django.views.generic import View
 from django.views.generic.base import TemplateResponseMixin
@@ -33,15 +33,17 @@
         
         npp = 48 if queryterms else 24
         notices = []
+        thesauruscache = {t.id: t.label for t in Thesaurus.objects.all()}
         
         if queryterms and search_in_translations and search_in_title:
             mainq = Q()
             if search_in_translations:
-                uriq = Q()
+                transq = Q()
                 for term in queryterms:
-                    uriq = uriq | Q(translations__label__icontains=term)
-                ds = DbpediaResource.objects.filter(translations__lang=lang).filter(uriq)
-                mainq = mainq | Q(dbpedia_resources__dbpediaresource__in=ds)
+                    transq = transq | Q(label__icontains=term)
+                ts = DbpediaFields.objects.filter(language_code=lang).filter(transq).values('term_id')
+                mainq = mainq | Q(noticeterm__term__in=ts)
+#                     mainq = mainq | Q(noticeterm__term__dbpedia_fields__language_code=lang,noticeterm__term__dbpedia_fields__label__icontains=term)
             if search_in_title:
                 for term in queryterms:
                     mainq = mainq | Q(titr__icontains=term)
@@ -57,10 +59,10 @@
         
         for n in ns:
             terms = [{
-                "locale_label": ts.dbpediaresource.translations.get(lang=lang).label,
-                "thesaurus": ts.thesaurus.label,
-                "dbpedia_uri": ts.dbpediaresource.uri
-            } for ts in n.dbpedia_resources.filter(dbpediaresource__translations__lang=lang)]
+                "locale_label": ts.term.dbpedia_fields.get(language_code=lang).label,
+                "thesaurus": thesauruscache[ts.term.thesaurus_id],
+                "dbpedia_uri": ts.term.dbpedia_uri
+            } for ts in n.noticeterm_set.filter(term__dbpedia_fields__language_code=lang)]
             termsbythesaurus = {}
             for term in terms:
                 if not term["thesaurus"] in termsbythesaurus:
@@ -88,11 +90,10 @@
         
         wpp = 30
         if show_tagcloud:
-            wqs = DbpediaResource.objects.filter(translations__lang=lang, notices__notice__in=qs).annotate(notice_count=Count('notices')).order_by("-notice_count")[:wpp]
-         
+            wqs = DbpediaFields.objects.filter(language_code=lang, term__notices__in=Notice.objects.exclude(image=None)).annotate(notice_count=Count('term__notices')).order_by('-notice_count')[:wpp]
             words = [{
-                "uri": w.uri,
-                "label": w.translations.get(lang=lang).label,
+                "uri": w.dbpedia_uri,
+                "label": w.label,
                 "notice_count": w.notice_count
             } for w in wqs]
         else:
@@ -127,17 +128,17 @@
         context["notice"] = notice
         context["title"] = notice.titr if notice.titr else notice.deno
         context["images"] = [i.url for i in notice.images.exclude(relative_url__endswith='v.jpg')]
-        terms = [{
-                  "label": nt.term.label,
-                  "thesaurus": nt.term.thesaurus.label,
-                  "dbpedia_uri": nt.term.dbpedia_uri
-                  } for nt in notice.noticeterm_set.select_related('term__thesaurus').all()]
-        uris = [t["dbpedia_uri"] for t in terms if t["dbpedia_uri"]]
-        lls = DbpediaTranslation.objects.filter(lang=lang, dbpediaresource__uri__in=uris).all()
-        locale_labels = {l.dbpediaresource.uri: l.label for l in lls}
-        for t in terms:
-            t["translated"] = (t["dbpedia_uri"] in locale_labels)
-            t["locale_label"] = locale_labels.get(t["dbpedia_uri"], t["label"])
+        terms = []
+        for nt in notice.noticeterm_set.select_related('dbpedia_fields').all():
+            translated_term = nt.term.dbpedia_fields.filter(language_code = lang)
+            termdict = {
+                "label": nt.term.label,
+                "thesaurus": nt.term.thesaurus.label,
+                "dbpedia_uri": nt.term.dbpedia_uri,
+                "translated": True if translated_term else False,
+                "locale_label": translated_term[0].label if translated_term else nt.term.label
+            }
+            terms.append(termdict)
         termsbythesaurus = {}
         for term in terms:
             if not term["thesaurus"] in termsbythesaurus: