# -*- 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):