Bugfix: la recherche plantait quand on ne lui donnait pas de texte à chercher.
authorEric Mc Sween <eric.mcsween@gmail.com>
Fri, 29 Oct 2010 20:20:14 +0000 (16:20 -0400)
committerEric Mc Sween <eric.mcsween@gmail.com>
Fri, 29 Oct 2010 20:20:14 +0000 (16:20 -0400)
auf_savoirs_en_partage/savoirs/models.py
auf_savoirs_en_partage/savoirs/views.py
auf_savoirs_en_partage/sitotheque/models.py

index c0be775..bb50020 100644 (file)
@@ -88,7 +88,7 @@ class EvenementQuerySet(models.query.QuerySet):
                 q = part
             else:
                 q = q & part
-        return qs.filter(q)
+        return qs.filter(q) if q is not None else qs
 
     def search_titre(self, text):
         qs = self
@@ -267,15 +267,19 @@ class RecordQuerySet(models.query.QuerySet):
                 q = part
             else:
                 q = q & part
-        qs = qs.filter(q).distinct()
+        if q is not None:
+            qs = qs.filter(q).distinct()
 
         # On donne un point pour chaque mot présent dans le titre.
-        score_expr = ' + '.join(['(title LIKE %s)'] * len(words))
-        score_params = ['%' + word + '%' for word in words]
-        return qs.extra(
-            select={'score': score_expr},
-            select_params=score_params
-        ).order_by('-score')
+        if words:
+            score_expr = ' + '.join(['(title LIKE %s)'] * len(words))
+            score_params = ['%' + word + '%' for word in words]
+            qs = qs.extra(
+                select={'score': score_expr},
+                select_params=score_params
+            ).order_by('-score')
+
+        return qs
 
     def search_auteur(self, text):
         qs = self
index cb8de2f..1897b7a 100644 (file)
@@ -1,7 +1,7 @@
 # -*- encoding: utf-8 -*-
 import datetime, simplejson, copy, vobject
 
-from django.shortcuts import render_to_response, get_object_or_404
+from django.shortcuts import render_to_response, get_object_or_404, redirect
 from django.template import Context, RequestContext
 from django.http import HttpResponse, HttpResponseRedirect
 from django.contrib.auth.decorators import login_required
@@ -57,6 +57,8 @@ def legal(request):
 # recherche
 def recherche(request):
     query = request.GET.get("q", "")
+    if not query.strip():
+        return redirect('/')
     ressources = Record.objects.validated().search(query)
     actualites = Actualite.objects.filter(visible=1).search(query)
     evenements = Evenement.objects.filter(approuve=1).search(query)
index 12cfd1b..e04ff77 100644 (file)
@@ -43,7 +43,8 @@ class SiteQuerySet(models.query.QuerySet):
                 q = part
             else:
                 q = q & part
-        qs = qs.filter(q).distinct()
+        if q is not None:
+            qs = qs.filter(q).distinct()
         return qs
 
 class Site(models.Model):