# -*- encoding: utf-8 -*-
import re
from django import forms
+from django.db.models import Q
from datamaster_modeles.models import Thematique, Pays, Region
from models import Evenement, Discipline, Record, Actualite
from savoirs.lib.recherche import build_search_regexp
+# Modifications custom aux champs Django
+
+class SEPDateField(forms.DateField):
+ """Un champ de date avec des valeurs par défaut un peu modifiées."""
+
+ def __init__(self, *args, **kwargs):
+
+ # La classe "date" active le datepicker dans sep.js
+ kwargs.setdefault('widget', forms.DateInput(*args, attrs={'class': 'date'}))
+
+ # Nous recevons les dates en format français
+ kwargs.setdefault('input_formats', ['%d/%m/%Y'])
+
+ forms.DateField.__init__(self, *args, **kwargs)
+
# Formulaires de recherche
class RechercheAvancee (forms.Form):
"""Formulaire de recherche pour les actualités."""
q = forms.CharField(required=False, label="Mots-clés")
- date_min = forms.DateField(required=False, label="Depuis le",
- widget=forms.DateInput(attrs={'class': 'date'}),
- input_formats=['%d/%m/%Y'])
- date_max = forms.DateField(required=False, label="Jusqu'au",
- widget=forms.DateInput(attrs={'class': 'date'}),
- input_formats=['%d/%m/%Y'])
+ date_min = SEPDateField(required=False, label="Depuis le")
+ date_max = SEPDateField(required=False, label="Jusqu'au")
def get_query_set(self):
"""Retourne l'ensemble des actualités qui correspondent aux valeurs
"""Formulaire de recherche pour les événements."""
q = forms.CharField(required=False, label="Mots-clés")
+ titre = forms.CharField(required=False, label="Intitulé")
+ type = forms.ChoiceField(required=False, choices=(('', 'Tous'),)+Evenement.TYPE_CHOICES)
+ discipline = forms.ModelChoiceField(queryset=Discipline.objects.all(),
+ required=False, label="Discipline", empty_label="Toutes")
+ date_min = SEPDateField(required=False, label="Depuis le")
+ date_max = SEPDateField(required=False, label="Jusqu'au")
def get_query_set(self):
"""Retourne l'ensemble des événements qui correspondent aux valeurs
query = self.cleaned_data['q']
if query:
evenements = evenements.search(query)
+ titre = self.cleaned_data['titre']
+ if titre:
+ evenements = evenements.search_titre(titre)
+ type = self.cleaned_data['type']
+ if type:
+ evenements = evenements.filter(type=type)
+ discipline = self.cleaned_data['discipline']
+ if discipline:
+ evenements = evenements.filter(Q(discipline=discipline) | Q(discipline_secondaire=discipline))
+ date_min = self.cleaned_data['date_min']
+ if date_min:
+ evenements = evenements.filter(debut__gte=date_min)
+ date_max = self.cleaned_data['date_max']
+ if date_max:
+ evenements = evenements.filter(debut__lte=date_max)
return evenements
def get_search_regexp(self):
Q(contact__icontains=word))
return qs
+ def search_titre(self, text):
+ qs = self
+ for word in text.split():
+ qs = qs.filter(titre__icontains=word)
+ return qs
+
class Evenement(models.Model):
+ TYPE_CHOICES = ((u'Colloque', u'Colloque'),
+ (u'Conférence', u'Conférence'),
+ (u'Appel à contribution', u'Appel à contribution'),
+ (u'Journée d\'étude', u'Journée d\'étude'),
+ (None, u'Autre'))
+
uid = models.CharField(max_length = 255, default = str(uuid.uuid1()))
approuve = models.BooleanField(default = False)
titre = models.CharField(max_length=255)
"Discipline secondaire",
blank = True, null = True)
mots_cles = models.TextField('Mots-Clés', blank = True, null = True)
- type = models.CharField(max_length = 255, choices = \
- (('Colloque', 'Colloque'),
- ('Conférence', 'Conférence'),
- ('Appel à contribution', 'Appel à contribution'),
- ('Journée d\'étude', 'Journée d\'étude'),
- (None, 'Autre')
- )) #TODO: choices
+ type = models.CharField(max_length=255, choices=TYPE_CHOICES)
fuseau = TimeZoneField(verbose_name = 'Fuseau horaire')
debut = models.DateTimeField(default = datetime.datetime.now)
fin = models.DateTimeField(default = datetime.datetime.now)