Author: piquadrat
Date: Thu Feb 26 11:37:45 2009
New Revision: 370

Modified:
    trunk/pages/managers.py
    trunk/pages/models.py

Log:
make only a single query for all languages of a particular content object,  
only select columns that are needed


Modified: trunk/pages/managers.py
==============================================================================
--- trunk/pages/managers.py     (original)
+++ trunk/pages/managers.py     Thu Feb 26 11:37:45 2009
@@ -121,22 +121,16 @@
          Gets the latest content for a particular page and language. Falls  
back
          to another language if wanted.
          """
-        try:
-            content = self.filter(language=language, page=page,
-                                        type=cnttype).latest(latest_by)
-            return content.body
-        except self.model.DoesNotExist:
-            pass
+        content = reversed(self.filter(page=page,  
type=cnttype).order_by(latest_by).values('language', 'body'))
+        content_dict = dict([(c['language'], c['body']) for c in content])
+        if language in content_dict:
+            return content_dict[language]
          # requested language not found. Try other languages on after
          # the other
-        if language_fallback:
+        elif language_fallback:
              for lang in settings.PAGE_LANGUAGES:
-                try:
-                    content = self.filter(language=lang[0], page=page,
-                        type=cnttype).latest(latest_by)
-                    return content.body
-                except self.model.DoesNotExist:
-                    pass
+                if lang[0] in content_dict:
+                    return content_dict[lang[0]]
          return None

      def get_content_slug_by_slug(self, slug, site_id=None,  
latest_by='creation_date'):

Modified: trunk/pages/models.py
==============================================================================
--- trunk/pages/models.py       (original)
+++ trunk/pages/models.py       Thu Feb 26 11:37:45 2009
@@ -122,14 +122,10 @@
          if languages:
              return languages

-        languages = []
-        for lang in settings.PAGE_LANGUAGES:
-            # one request by language to avoid to get huge revisions
-            if Content.objects.filter(language=lang[0], page=self,  
type="slug").count() > 0:
-               languages.append(lang[0])
-
+        languages = [c['language'] for c in  
Content.objects.filter(page=self, type="slug").values('language')]
+        languages = list(set(languages)) # remove duplicates
+        languages.sort()
          cache.set(self.PAGE_LANGUAGES_KEY % (self.id), languages)
-
          return languages

      def get_absolute_url(self, language=None):

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"pinax-updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/pinax-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to