Recherche par mots-clés dans les disciplines et régions des ressources.
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / savoirs / models.py
index b1dbd0a..4b85fa9 100644 (file)
@@ -62,6 +62,30 @@ class Actualite(models.Model):
         db_table = u'actualite'
         ordering = ["-date",]
 
+class EvenementManager(models.Manager):
+
+    def get_query_set(self):
+        return EvenementQuerySet(self.model)
+
+    def search(self, text):
+        return self.get_query_set().search(text)
+
+class EvenementQuerySet(models.query.QuerySet):
+
+    def search(self, text):
+        qs = self
+        words = text.split()
+        for word in words:
+            qs = qs.filter(Q(titre__icontains=word) | 
+                           Q(mots_cles__icontains=word) |
+                           Q(discipline__nom__icontains=word) | 
+                           Q(discipline_secondaire__nom__icontains=word) |
+                           Q(type__icontains=word) |
+                           Q(lieu__icontains=word) |
+                           Q(description__icontains=word) |
+                           Q(contact__icontains=word))
+        return qs
+
 class Evenement(models.Model):
     uid = models.CharField(max_length = 255, default = str(uuid.uuid1()))
     approuve = models.BooleanField(default = False)
@@ -90,6 +114,11 @@ class Evenement(models.Model):
     contact = models.TextField(blank = True, null = True)
     url = models.CharField(max_length=255, blank = True, null = True)
 
+    objects = EvenementManager()
+
+    class Meta:
+        ordering = ['-debut']
+
     def __unicode__(self,):
         return "[%s] %s" % (self.uid, self.titre)
 
@@ -214,7 +243,9 @@ class RecordQuerySet(models.query.QuerySet):
         for word in words:
             qs = qs.filter(Q(title__icontains=word) | Q(description__icontains=word) |
                            Q(creator__icontains=word) | Q(contributor__icontains=word) |
-                           Q(subject__icontains=word))
+                           Q(subject__icontains=word) | Q(disciplines__nom__icontains=word) |
+                           Q(regions__nom__icontains=word) | Q(pays__nom__icontains=word) |
+                           Q(pays__region__nom__icontains=word))
 
         # On donne un point pour chaque mot présent dans le titre.
         score_expr = ' + '.join(['(title LIKE %s)'] * len(words))