Bugfix: problèmes avec les modèles de la sitothèque lors du merge avec la
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / sitotheque / models.py
index 67da784..297408e 100644 (file)
@@ -1,8 +1,9 @@
 # -*- encoding: utf-8 -*-
+from datamaster_modeles.models import *
 from django.db import models
 from django.db.models import Q
-from datamaster_modeles.models import *
-from savoirs.models import Discipline, RandomQuerySetMixin
+from djangosphinx.models import SphinxSearch
+from savoirs.models import Discipline, SEPManager, SEPSphinxQuerySet, SEPQuerySet
 
 TYPE_SITE_CHOICES = (
     ('RV', 'Revue en ligne'), 
@@ -17,66 +18,29 @@ TYPE_SITE_CHOICES = (
     ('AU', 'Autre type de site'),
     )
 
-class SiteManager(models.Manager):
+class SiteQuerySet(SEPQuerySet):
 
-    def get_query_set(self):
-        return SiteQuerySet(self.model).filter(actif=True)
+    def filter_pays(self, pays):
+        return self.filter(pays=pays)
 
-    def search(self, text):
-        return self.get_query_set().search(text)
+class SiteSphinxQuerySet(SEPSphinxQuerySet):
 
-    def filter_region(self, region):
-        return self.get_query_set().filter_region(region)
+    def __init__(self, model=None):
+        SEPSphinxQuerySet.__init__(self, model=model, index='savoirsenpartage_sites', weights=dict(titre=3))
 
-    def filter_discipline(self, discipline):
-        return self.get_query_set().filter_discipline(discipline)
+    def filter_pays(self, pays):
+        return self.filter(pays_ids=pays.id)
 
-class SiteQuerySet(models.query.QuerySet, RandomQuerySetMixin):
+class SiteManager(SEPManager):
 
-    def search(self, text):
-        qs = self
-        q = None
-        for word in text.split():
-            part = (Q(titre__icontains=word) |
-                    Q(description__icontains=word) |
-                    Q(editeur__icontains=word) |
-                    Q(auteur__icontains=word) |
-                    Q(mots_cles__icontains=word) |
-                    Q(discipline__nom__icontains=word) |
-                    Q(pays__nom__icontains=word))
-            if q is None:
-                q = part
-            else:
-                q = q & part
-        if q is not None:
-            qs = qs.filter(q).distinct()
-        return qs
+    def get_query_set(self):
+        return SiteQuerySet(self.model).filter(actif=True)
 
-    def filter_discipline(self, discipline):
-        """Ne conserve que les sites dans la discipline donnée.
-           
-        Si ``disicipline`` est None, ce filtre n'a aucun effet."""
-        if discipline is None:
-            return self
-        if not isinstance(discipline, Discipline):
-            discipline = Discipline.objects.get(pk=discipline)
-        return self.filter(Q(discipline=discipline) |
-                           Q(titre__icontains=discipline.nom) |
-                           Q(description__icontains=discipline.nom) |
-                           Q(mots_cles__icontains=discipline.nom)).distinct()
+    def get_sphinx_query_set(self):
+        return SiteSphinxQuerySet(self.model)
 
-    def filter_region(self, region):
-        """Ne conserve que les sites dans la région donnée.
-           
-        Si ``region`` est None, ce filtre n'a aucun effet."""
-        if region is None:
-            return self
-        if not isinstance(region, Region):
-            region = Region.objects.get(pk=region)
-        return self.filter(Q(pays__region=region) |
-                           Q(titre__icontains=region.nom) |
-                           Q(description__icontains=region.nom) |
-                           Q(mots_cles__icontains=region.nom)).distinct()
+    def filter_pays(self, pays):
+        return self.get_query_set().filter_pays(pays)
 
 class Site(models.Model):
     """Fiche d'info d'un site web"""