Filtres discipline/région mieux ciblés.
authorEric Mc Sween <eric.mcsween@gmail.com>
Tue, 16 Nov 2010 19:38:42 +0000 (14:38 -0500)
committerEric Mc Sween <eric.mcsween@gmail.com>
Tue, 16 Nov 2010 19:38:42 +0000 (14:38 -0500)
On cherche maintenant seulement dans les champs pertinents et on cherche la
chaîne complète seulement.

auf_savoirs_en_partage/chercheurs/models.py
auf_savoirs_en_partage/savoirs/models.py
auf_savoirs_en_partage/savoirs/views.py
auf_savoirs_en_partage/sitotheque/models.py

index c1863d7..7c1b83c 100644 (file)
@@ -103,7 +103,21 @@ class ChercheurQuerySet(models.query.QuerySet, RandomQuerySetMixin):
             return self
         if not isinstance(discipline, Discipline):
             discipline = Discipline.objects.get(pk=discipline)
-        return self.search(discipline.nom)
+        return self.filter(Q(discipline=discipline) |
+                           Q(theme_recherche__icontains=discipline.nom) |
+                           Q(groupe_recherche__icontains=discipline.nom) |
+                           Q(publication1__titre__icontains=discipline.nom) |
+                           Q(publication2__titre__icontains=discipline.nom) |
+                           Q(publication3__titre__icontains=discipline.nom) |
+                           Q(publication4__titre__icontains=discipline.nom) |
+                           Q(these__titre__icontains=discipline.nom) |
+                           Q(groupes__nom__icontains=discipline.nom) |
+                           Q(expertises__nom__icontains=discipline.nom) |
+                           Q(mots_cles__icontains=discipline.nom) |
+                           Q(membre_instance_auf_details__icontains=discipline.nom) |
+                           Q(membre_association_francophone_details__icontains=discipline.nom) |
+                           Q(expert_oif_details__icontains=discipline.nom) |
+                           Q(membre_reseau_institutionnel_details__icontains=discipline.nom)).distinct()
 
     def filter_region(self, region):
         """Ne conserve que les évènements dans la région donnée.
@@ -111,9 +125,8 @@ class ChercheurQuerySet(models.query.QuerySet, RandomQuerySetMixin):
         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.search(region.nom)
+        return self.filter(Q(etablissement__pays__region=region) |
+                           Q(etablissement_autre_pays__region=region))
 
 STATUT_CHOICES = (('enseignant', 'Enseignant-chercheur dans un établissement'), ('etudiant', 'Étudiant-chercheur doctorant'), ('independant', 'Chercheur indépendant docteur'))
 class Chercheur(models.Model):
index ec58954..82fc289 100644 (file)
@@ -78,7 +78,9 @@ class ActualiteQuerySet(models.query.QuerySet, RandomQuerySetMixin):
             return self
         if not isinstance(discipline, Discipline):
             discipline = Discipline.objects.get(pk=discipline)
-        return self.search(discipline.nom)
+        return self.filter(Q(disciplines=discipline) |
+                           Q(titre__icontains=discipline.nom) |
+                           Q(texte__icontains=discipline.nom)).distinct()
 
     def filter_region(self, region):
         """Ne conserve que les actualités dans la région donnée.
@@ -88,7 +90,9 @@ class ActualiteQuerySet(models.query.QuerySet, RandomQuerySetMixin):
             return self
         if not isinstance(region, Region):
             region = Region.objects.get(pk=region)
-        return self.search(region.nom)
+        return self.filter(Q(regions=region) |
+                           Q(titre__icontains=region.nom) |
+                           Q(texte__icontains=region.nom)).distinct()
 
 class Actualite(models.Model):
     id = models.AutoField(primary_key=True, db_column='id_actualite')
@@ -165,7 +169,11 @@ class EvenementQuerySet(models.query.QuerySet, RandomQuerySetMixin):
             return self
         if not isinstance(discipline, Discipline):
             discipline = Discipline.objects.get(pk=discipline)
-        return self.search(discipline.nom)
+        return self.filter(Q(discipline=discipline) |
+                           Q(discipline_secondaire=discipline) |
+                           Q(titre__icontains=discipline.nom) |
+                           Q(mots_cles__icontains=discipline.nom) |
+                           Q(description__icontains=discipline.nom))
 
     def filter_region(self, region):
         """Ne conserve que les évènements dans la région donnée.
@@ -175,7 +183,11 @@ class EvenementQuerySet(models.query.QuerySet, RandomQuerySetMixin):
             return self
         if not isinstance(region, Region):
             region = Region.objects.get(pk=region)
-        return self.search(region.nom)
+        return self.filter(Q(regions=region) |
+                           Q(titre__icontains=region.nom) |
+                           Q(mots_cles__icontains=region.nom) |
+                           Q(description__icontains=region.nom) |
+                           Q(lieu__icontains=region.nom)).distinct()
 
 def build_time_zone_choices():
     fr_names = set()
@@ -433,7 +445,10 @@ class RecordQuerySet(models.query.QuerySet, RandomQuerySetMixin):
             return self
         if not isinstance(discipline, Discipline):
             discipline = Discipline.objects.get(pk=discipline)
-        return self.search(discipline.nom)
+        return self.filter(Q(disciplines=discipline) |
+                           Q(title__icontains=discipline.nom) |
+                           Q(description__icontains=discipline.nom) |
+                           Q(subject__icontains=discipline.nom)).distinct()
 
     def filter_region(self, region):
         """Ne conserve que les ressources dans la région donnée.
@@ -443,7 +458,11 @@ class RecordQuerySet(models.query.QuerySet, RandomQuerySetMixin):
             return self
         if not isinstance(region, Region):
             region = Region.objects.get(pk=region)
-        return self.search(region.nom)
+        return self.filter(Q(pays__region=region) |
+                           Q(regions=region) |
+                           Q(title__icontains=region.nom) |
+                           Q(description__icontains=region.nom) |
+                           Q(subject__icontains=region.nom)).distinct()
 
     def validated(self):
         """Ne garder que les ressources validées et qui sont soit dans aucun
index 8f41b6e..a7ea72b 100644 (file)
@@ -28,7 +28,7 @@ def index(request, discipline=None, region=None):
     oldest = datetime.date.today() - delta
     actualites = Actualite.objects.filter(visible=True, date__gt=oldest).filter_discipline(discipline).filter_region(region)[:4]
     evenements = Evenement.objects.filter(approuve=True).filter_discipline(discipline).filter_region(region)[:4]
-    ressources = Record.objects.filter_discipline(discipline).filter_region(region).random(4)
+    ressources = Record.objects.validated().filter_discipline(discipline).filter_region(region).random(4)
     chercheurs = Chercheur.objects.filter_discipline(discipline).filter_region(region).order_by('-date_modification')[:10]
     sites = Site.objects.filter_discipline(discipline).filter_region(region).random(4)
     return render_to_response(
index 71540b3..7dd4b42 100644 (file)
@@ -60,7 +60,10 @@ class SiteQuerySet(models.query.QuerySet, RandomQuerySetMixin):
             return self
         if not isinstance(discipline, Discipline):
             discipline = Discipline.objects.get(pk=discipline)
-        return self.search(discipline.nom)
+        return self.filter(Q(discipline=discipline) |
+                           Q(titre__icontains=discipline.nom) |
+                           Q(description__icontains=discipline.nom) |
+                           Q(mots_cles__icontains=discipline.nom))
 
     def filter_region(self, region):
         """Ne conserve que les sites dans la région donnée.
@@ -70,7 +73,10 @@ class SiteQuerySet(models.query.QuerySet, RandomQuerySetMixin):
             return self
         if not isinstance(region, Region):
             region = Region.objects.get(pk=region)
-        return self.search(region.nom)
+        return self.filter(Q(pays__region=region) |
+                           Q(titre__icontains=region.nom) |
+                           Q(description__icontains=region.nom) |
+                           Q(mots_cles__icontains=region.nom)).distinct()
 
 class Site(models.Model):
     """Fiche d'info d'un site web"""