diff --git a/monstage/templates/monstage/search.html b/monstage/templates/monstage/search.html
index d84a50a..e772df0 100644
--- a/monstage/templates/monstage/search.html
+++ b/monstage/templates/monstage/search.html
@@ -17,13 +17,11 @@
@@ -52,7 +51,7 @@
{% if resultats %}
- {{ resultats.length }} stage(s) trouvé(s)
+ {{ resultats|length }} stage(s) trouvé(s)
{% for stage in resultats %}
diff --git a/monstage/views.py b/monstage/views.py
index b6532f3..1e0de06 100644
--- a/monstage/views.py
+++ b/monstage/views.py
@@ -268,6 +268,7 @@ def detail(request, question_id):
#
# Recherche de stages
#
+from django.db.models import Q
class SearchForm(forms.Form):
matiere = forms.ChoiceField(label='Matière :', required=False, choices=tuple([('','Toute matière')] + [(mat.id, mat.name) for mat in StageMatiere.objects.all()]))
@@ -286,20 +287,23 @@ def search(request):
if form.is_valid():
lon = form.cleaned_data['longitude']
lat = form.cleaned_data['latitude']
+ lieu = form.cleaned_data['lieu']
stages = Stage.objects
- if lat and lon:
+ if lat and lon and lieu:
coords = GEOSGeometry('POINT(%f %f)' % (lon, lat), srid=4326)
distance = {'km': form.cleaned_data['tolerance']}
lieux = Lieu.objects.filter(coord__distance_lte=(coords, measure.D(**distance)))
lieux = lieux.distance(coords).order_by('distance')
- stages = lieux.stage_set
+ stages = stages.filter(lieux__in=lieux)
matiere = form.cleaned_data['matiere']
if matiere:
stages = stages.filter(matieres__pk=matiere)
- thematiques = form.cleaned_data['thematiques']
- if thematiques:
- #todo
- pass
+ thematiques = form.cleaned_data['thematiques'].split(',')
+ if thematiques:
+ q = Q()
+ for thematique in thematiques:
+ q |= Q(thematiques__name__icontains = thematique)
+ stages = stages.filter(q).distinct()
stages = stages.all()
else:
form = SearchForm()