Tri approprié des briques
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / sitotheque / forms.py
1 # -*- encoding: utf-8 -*-
2 from datamaster_modeles.models import Discipline, Region
3 from django import forms
4 from models import *
5 from savoirs.lib.recherche import build_search_regexp
6
7 class SiteSearchForm(forms.Form):
8 q = forms.CharField(required=False, label="Rechercher dans tous les champs")
9 discipline = forms.ModelChoiceField(queryset=Discipline.objects.all(), required=False, label="Discipline", empty_label="Toutes")
10 pays = forms.ModelChoiceField(queryset=Pays.objects.all(), required=False, label="Pays", empty_label="Tous")
11 region = forms.ModelChoiceField(queryset=Region.objects.all(), required=False, label="Région", empty_label="Toutes",
12 help_text="La région est ici définie au sens, non strictement géographique, du Bureau régional de l'AUF de référence.")
13
14 def get_query_set(self):
15 """Retourne l'ensemble des sites qui correspondent aux valeurs
16 entrées dans le formulaire."""
17 sites = Site.objects.order_by("titre")
18 if self.is_valid():
19 q = self.cleaned_data["q"]
20 if q:
21 sites = sites.search(q)
22 discipline = self.cleaned_data['discipline']
23 if discipline:
24 sites = sites.filter_discipline(discipline)
25 region = self.cleaned_data['region']
26 if region:
27 sites = sites.filter_region(region)
28 pays = self.cleaned_data["pays"]
29 if pays:
30 sites = sites.filter(pays=pays.pk)
31
32 if not q:
33 sites = sites.order_by('-date_maj')
34 return sites
35
36 def get_search_regexp(self):
37 """Retourne une expression régulière compilée qui peut servir à
38 chercher les mot-clés recherchés dans un texte."""
39 if self.is_valid():
40 return build_search_regexp(self.cleaned_data['q'])