Merge branch 'master' into test
authorEric Mc Sween <eric.mcsween@gmail.com>
Wed, 15 Dec 2010 15:35:21 +0000 (10:35 -0500)
committerEric Mc Sween <eric.mcsween@gmail.com>
Wed, 15 Dec 2010 15:35:21 +0000 (10:35 -0500)
auf_savoirs_en_partage/savoirs/models.py

index 98e6af5..5575740 100644 (file)
@@ -18,7 +18,7 @@ from django.db import models
 from django.db.models import Q, Max
 from django.db.models.signals import pre_delete
 from django.utils.encoding import smart_unicode
-from djangosphinx.models import SphinxQuerySet
+from djangosphinx.models import SphinxQuerySet, SearchError
 from savoirs.globals import META
 from settings import CALENDRIER_URL, SITE_ROOT_URL
 
@@ -75,6 +75,22 @@ class SEPSphinxQuerySet(SphinxQuerySet, RandomQuerySetMixin):
            tous les champs."""
         return self.search('"%s"' % region.nom)
 
+    def _get_sphinx_results(self):
+        try:
+            return SphinxQuerySet._get_sphinx_results(self)
+        except SearchError:
+            # Essayons d'enlever les caractères qui peuvent poser problème.
+            for c in '|!@()~/<=^$':
+                self._query = self._query.replace(c, ' ')
+            try:
+                return SphinxQuerySet._get_sphinx_results(self)
+            except SearchError:
+                # Ça ne marche toujours pas. Enlevons les guillemets et les
+                # tirets.
+                for c in '"-':
+                    self._query = self._query.replace(c, ' ')
+                return SphinxQuerySet._get_sphinx_results(self)
+
 class SEPManager(models.Manager):
     """Lorsque les méthodes ``search``, ``filter_region`` et
        ``filter_discipline`` sont appelées sur ce manager, le query set
@@ -148,6 +164,14 @@ class ActualiteSphinxQuerySet(SEPSphinxQuerySet):
         SEPSphinxQuerySet.__init__(self, model=model, index='savoirsenpartage_actualites',
                                    weights=dict(titre=3))
 
+    def filter_date(self, min=None, max=None):
+        qs = self
+        if min:
+            qs = qs.filter(date__gte=min.toordinal()+365)
+        if max:
+            qs = qs.filter(date__lte=max.toordinal()+365)
+        return qs
+        
 class ActualiteManager(SEPManager):
     
     def get_query_set(self):