# -*- encoding: utf-8 -*-
from django.db import models
+from django.db.models import Q
from datamaster_modeles.models import *
from auf_references_modeles.models import Thematique
from savoirs.models import Discipline
class Utilisateur(Personne):
password = models.CharField(max_length=35, verbose_name = 'Mot de passe')
+class ChercheurManager(models.Manager):
+
+ def get_query_set(self):
+ return ChercheurQuerySet(self.model)
+
+ def search(self, text):
+ return self.get_query_set().search(text)
+
+class ChercheurQuerySet(models.query.QuerySet):
+
+ def search(self, text):
+ qs = self
+ for word in text.split():
+ qs = qs.filter(Q(personne__nom__icontains=word) |
+ Q(personne__prenom__icontains=word) |
+ Q(expertise__icontains=word) |
+ Q(etablissement_autre_nom__icontains=word) |
+ Q(etablissement__nom__icontains=word))
+ return qs
+
FONCTION_CHOICES = (('Professeur', 'Professeur'), ('Chercheur', 'Chercheur'), ('Chercheur_independant', 'Chercheur indépendant'), ('Doctorant', 'Doctorant'))
class Chercheur(models.Model):
id = models.AutoField(primary_key=True, db_column='id')
date_creation = models.DateField(auto_now_add=True, db_column='date_creation')
date_modification = models.DateField(auto_now=True, db_column='date_modification')
+ # Manager
+ objects = ChercheurManager()
+
def __unicode__(self):
return u"%s %s" % (self.personne.nom.upper(), self.personne.prenom.title())
list = list.filter(groupes=domaine)
mots_cles = simpleForm.cleaned_data["mots_cles"]
if mots_cles:
- list = list.filter( Q(personne__nom__search=mots_cles)
- | Q(personne__prenom__search=mots_cles)
- | Q(expertise__search=mots_cles)
- | Q(etablissement_autre_nom__search=mots_cles)
- | Q(etablissement__nom__search=mots_cles) )
+ list = list.search(mots_cles)
return list
def index(request):
context_instance = RequestContext(request))
# recherche
-def recherche (request):
+def recherche(request):
query = request.GET.get("q", "")
ressources = Record.objects.validated().search(query)
actualites = Actualite.objects.filter(visible=1).search(query)
evenements = Evenement.objects.filter(approuve=1).search(query)
+ chercheurs = Chercheur.objects.search(query)
search_regexp = build_search_regexp(query)
return render_to_response(
"savoirs/recherche.html",
dict(q=query, ressources=ressources[:5], actualites=actualites[:5],
evenements=evenements[:5], total_evenements=len(evenements),
+ chercheurs=chercheurs[:10], total_chercheurs=len(chercheurs),
total_ressources=len(ressources), total_actualites=len(actualites),
search_regexp=search_regexp),
context_instance = RequestContext(request)
</script>
-{% if ressources %}
-<h4>Ressources correspondant à « {{ q }} » ({{ ressources|length }} sur {{ total_ressources }}):</h4>
<div class="zone-texte">
+ {% if ressources %}
+ <h4>Ressources correspondant à « {{ q }} » ({{ ressources|length }} sur {{ total_ressources }}):</h4>
{% for ressource in ressources %}
{% include "savoirs/ressource_resultat.html" %}
{% endfor %}
{% ifnotequal ressources|length total_ressources %}
<p><a href="{% url savoirs.views.ressource_index %}?q={{ q|urlencode }}">Toutes les {{ total_ressources }} ressources correspondant à « {{ q }} »</a></p>
{% endifnotequal %}
-</div>
-{% endif %}
+ {% endif %}
-{% if actualites %}
-<h4>Actualités correspondant à « {{ q }} » ({{ actualites|length }} sur {{ total_actualites }}):</h4>
-<div class="zone-texte">
+ {% if actualites %}
+ <h4>Actualités correspondant à « {{ q }} » ({{ actualites|length }} sur {{ total_actualites }}):</h4>
{% for actualite in actualites %}
{% include "savoirs/actualite_resultat.html" %}
{% endfor %}
{% ifnotequal actualites|length total_actualites %}
<p><a href="{% url savoirs.views.actualite_index %}?q={{ q|urlencode }}">Toutes les {{ total_ressources }} actualités correspondant à « {{ q }} »</a></p>
{% endifnotequal %}
-</div>
-{% endif %}
+ {% endif %}
-{% if evenements %}
-<h4>Événements correspondant à « {{ q }} » ({{ evenements|length }} sur {{ total_evenements }}):</h4>
-<div class="zone-texte">
+ {% if evenements %}
+ <h4>Événements correspondant à « {{ q }} » ({{ evenements|length }} sur {{ total_evenements }}):</h4>
{% for evenement in evenements %}
{% include "savoirs/evenement_resultat.html" %}
{% endfor %}
{% ifnotequal evenements|length total_evenements %}
<p><a href="{% url savoirs.views.evenement_index %}?q={{ q|urlencode }}">Tous les {{ total_evenements }} événements correspondant à « {{ q }} »</a></p>
{% endifnotequal %}
-</div>
-{% endif %}
+ {% endif %}
-{% if not ressources and not actualites and not evenements %}
-<h4>Aucune ressource ne correspond à « {{ q }} »</h4>
-<div class="zone-texte">
+ {% if chercheurs %}
+ <h4>Chercheurs correspondant à « {{ q }} » ({{ chercheurs|length }} sur {{ total_chercheurs }}):</h4>
+ <ul>
+ {% for chercheur in chercheurs %}
+ <li><a href="{% url chercheurs.views.retrieve chercheur.id %}">{{ chercheur.personne.prenom }} {{ chercheur.personne.nom }}</a></li>
+ {% endfor %}
+ </ul>
+ {% endif %}
+
+ {% if not ressources and not actualites and not evenements and not chercheurs %}
+ <h4>Aucune ressource ne correspond à « {{ q }} »</h4>
<p><a href="{% url savoirs.views.index %}">Retour à la page d'accueil</a></p>
+ {% endif %}
</div>
-{% endif %}
{% if user.is_authenticated %}
{% include "savoirs/editor.html" %}