# -*- encoding: utf-8 -*-
from django import forms
+from django.db.models import Q
from models import *
-from models import Utilisateur
from savoirs.forms import SEPDateField
-from models import STATUT_CHOICES
class PersonneForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput(), label="Mot de passe")
fields = ('nom', 'prenom', 'genre')
class RepertoireSearchForm (forms.Form):
- mots_cles = forms.CharField (required = False, label="Mots-clés")
+ mots_cles = forms.CharField(required=False, label="Mots-clés")
+ nom = forms.CharField(required=False, label="Nom")
discipline = forms.ModelChoiceField(queryset=Discipline.objects.all(), required=False, label="Discipline", empty_label="Tous")
domaine = forms.ModelChoiceField(queryset=Groupe.objects.all(), required=False, label="Domaine de recherche", empty_label="Tous")
statut = forms.ChoiceField(choices=(('','Tous'),)+STATUT_CHOICES+(('expert','Expert'),), required=False, label="Statut")
pays = forms.ModelChoiceField(queryset=Pays.objects.all().order_by("nom"), required=False, label="Localisation", empty_label="Tous")
+ def get_query_set(self):
+ qs = Chercheur.objects.all()
+ if self.is_valid():
+ nom = self.cleaned_data['nom']
+ if nom:
+ qs = qs.search_nom(nom)
+ pays = self.cleaned_data["pays"]
+ if pays:
+ qs = qs.filter(Q(etablissement__pays = pays.pk) | Q(etablissement_autre_pays = pays.pk))
+ discipline = self.cleaned_data["discipline"]
+ if discipline:
+ qs = qs.filter(discipline=discipline)
+ domaine = self.cleaned_data["domaine"]
+ if domaine:
+ qs = qs.filter(groupes=domaine)
+ mots_cles = self.cleaned_data["mots_cles"]
+ if mots_cles:
+ qs = qs.search(mots_cles)
+ statut = self.cleaned_data["statut"]
+ if statut:
+ if statut == "expert":
+ qs = qs.exclude(expertise=None)
+ else:
+ qs = qs.filter(statut=statut)
+ return qs
+
class SendPasswordForm(forms.Form):
email = forms.EmailField(required=True, label="courriel")
def clean_email(self):
def search(self, text):
return self.get_query_set().search(text)
+ def search_nom(self, nom):
+ return self.get_query_set().search_nom(nom)
+
class ChercheurQuerySet(models.query.QuerySet):
def search(self, text):
q = q & part
return self.filter(q).distinct() if q is not None else self
+ def search_nom(self, nom):
+ q = None
+ for word in nom.split():
+ part = Q(personne__nom__icontains=word) | Q(personne__prenom__icontains=word)
+ if q is None:
+ q = part
+ else:
+ q = q & part
+ return self.filter(q) if q is not None else self
+
+
STATUT_CHOICES = (('enseignant', 'Enseignant-chercheur dans un établissement'), ('etudiant', 'Étudiant-chercheur doctorant'), ('independant', 'Chercheur indépendant docteur'))
class Chercheur(models.Model):
id = models.AutoField(primary_key=True, db_column='id')
}, context_instance=RequestContext(request))
-def chercheur_queryset (request):
- list = Chercheur.objects.order_by("id")
- pays = ""
-
- simpleForm = RepertoireSearchForm (request.GET)
- if simpleForm.is_valid ():
- pays = simpleForm.cleaned_data["pays"]
- if pays:
- list = list.filter(Q(etablissement__pays = pays.pk) | Q(etablissement_autre_pays = pays.pk))
- discipline = simpleForm.cleaned_data["discipline"]
- if discipline:
- list = list.filter(discipline=discipline)
- domaine = simpleForm.cleaned_data["domaine"]
- if domaine:
- list = list.filter(groupes=domaine)
- mots_cles = simpleForm.cleaned_data["mots_cles"]
- if mots_cles:
- list = list.search(mots_cles)
- statut = simpleForm.cleaned_data["statut"]
- if statut:
- if statut == "expert":
- list = list.exclude(expertise=None)
- else:
- list = list.filter(statut=statut)
- return list
-
def index(request):
"""Répertoire des chercheurs"""
-
- chercheurs = chercheur_queryset (request)
- repertoire_form = RepertoireSearchForm (request.GET)
-
+ search_form = RepertoireSearchForm(request.GET)
+ chercheurs = search_form.get_query_set()
nb_chercheurs = chercheurs.count()
- variables = { 'chercheurs': chercheurs,
- 'nb_chercheurs': nb_chercheurs,
- 'repertoire_form': repertoire_form,
- }
- return render_to_response ("chercheurs/index.html", \
- Context (variables),
- context_instance = RequestContext(request))
+ return render_to_response("chercheurs/index.html",
+ dict(chercheurs=chercheurs, nb_chercheurs=nb_chercheurs, repertoire_form=search_form),
+ context_instance=RequestContext(request))
def inscription(request):
if request.method == 'POST':