1 # -*- encoding: utf-8 -*-
3 from auf
.django
.references
.models
import Thematique
, Pays
, Region
4 from django
import forms
5 from django
.utils
.safestring
import mark_safe
7 from savoirs
.models
import \
8 Evenement
, Discipline
, RessourceSearch
, ActualiteSearch
, \
9 AppelSearch
, EvenementSearch
, Search
, RecordCategorie
10 from savoirs
.admin
import EvenementAdminForm
13 # Modifications custom aux champs Django
15 class SEPDateField(forms
.DateField
):
16 """Un champ de date avec des valeurs par défaut un peu modifiées."""
18 def __init__(self
, *args
, **kwargs
):
19 super(SEPDateField
, self
).__init__(self
, *args
, **kwargs
)
21 # La classe "date" active le datepicker dans sep.js
22 # Nous recevons les dates en format français
24 self
.widget
= forms
.DateInput(attrs
={'class': 'date'}, format
=format
)
25 self
.input_formats
= [format
]
26 self
.help_text
= 'format: jj/mm/aaaa'
29 class SEPSplitDateTimeWidget(forms
.MultiWidget
):
32 self
.date_format
= '%d/%m/%Y'
33 self
.time_format
= '%H:%M'
35 forms
.DateInput(attrs
={'class': 'date'}, format
=self
.date_format
),
36 forms
.TimeInput(attrs
={'class': 'time'}, format
=self
.time_format
)
38 super(SEPSplitDateTimeWidget
, self
).__init__(widgets
)
40 def decompress(self
, value
):
42 return [value
.date(), value
.time().replace(microsecond
=0)]
45 def format_output(self
, rendered_widgets
):
47 u
'Date: %s Heure: %s' % (rendered_widgets
[0], rendered_widgets
[1])
51 class SEPDateTimeField(forms
.DateTimeField
):
52 widget
= SEPSplitDateTimeWidget
54 def __init__(self
, *args
, **kwargs
):
55 super(SEPDateTimeField
, self
).__init__(
56 input_formats
=['%d/%m/%Y %H:%M'],
57 help_text
='format: jj/mm/aaaa'
61 # Formulaires de recherche
63 class RessourceSearchForm(forms
.ModelForm
):
64 """Formulaire de recherche pour les ressources."""
67 model
= RessourceSearch
68 fields
= ['q', 'auteur', 'titre', 'sujet', 'publisher', 'categorie',
69 'discipline', 'region']
72 class RessourceSearchEditForm(RessourceSearchForm
):
73 """Formulaire d'édition de recherche sauvegardée."""
75 class Meta(RessourceSearchForm
.Meta
):
76 fields
= ['nom', 'alerte_courriel'] + RessourceSearchForm
.Meta
.fields
79 class ActualiteSearchForm(forms
.ModelForm
):
80 """Formulaire de recherche pour les actualités."""
81 date_min
= SEPDateField(required
=False, label
="Depuis le")
82 date_max
= SEPDateField(required
=False, label
="Jusqu'au")
85 model
= ActualiteSearch
86 fields
= ['q', 'date_min', 'date_max', 'discipline', 'region']
89 class ActualiteSearchEditForm(ActualiteSearchForm
):
91 class Meta(ActualiteSearchForm
.Meta
):
92 fields
= ['nom', 'alerte_courriel'] + ActualiteSearchForm
.Meta
.fields
95 class AppelSearchForm(forms
.ModelForm
):
96 """Formulaire de recherche pour les actualités."""
97 date_min
= SEPDateField(required
=False, label
="Depuis le")
98 date_max
= SEPDateField(required
=False, label
="Jusqu'au")
102 fields
= ['q', 'date_min', 'date_max', 'discipline', 'region']
105 class AppelSearchEditForm(AppelSearchForm
):
107 class Meta(AppelSearchForm
.Meta
):
108 fields
= ['nom', 'alerte_courriel'] + AppelSearchForm
.Meta
.fields
111 class EvenementSearchForm(forms
.ModelForm
):
112 """Formulaire de recherche pour les évènements."""
113 date_min
= SEPDateField(required
=False, label
="Depuis le")
114 date_max
= SEPDateField(required
=False, label
="Jusqu'au")
117 model
= EvenementSearch
118 fields
= ['q', 'type', 'date_min', 'date_max', 'discipline', 'region']
121 class EvenementSearchEditForm(EvenementSearchForm
):
123 class Meta(EvenementSearchForm
.Meta
):
124 fields
= ['nom', 'alerte_courriel'] + EvenementSearchForm
.Meta
.fields
127 class SearchEditForm(forms
.ModelForm
):
135 class EvenementForm(EvenementAdminForm
):
136 debut
= SEPDateTimeField()
137 fin
= SEPDateTimeField()
138 description
= forms
.CharField(
139 label
='Description', required
=True,
141 "Présenter les thématiques de l'évènement et donner "
142 "toutes les informations utiles aux futurs participants."
144 widget
=forms
.Textarea
146 pays
= forms
.ModelChoiceField(
147 queryset
=Pays
.objects
.all(), required
=True, label
='Pays',
149 "La sélection du pays entraine la saisie automatique "
156 exclude
= ('contact', 'approuve', 'uid', 'regions')
159 # Admin views pour les associations par lots
161 class CategorieForm(forms
.Form
):
162 categorie
= forms
.ModelChoiceField(queryset
=RecordCategorie
.objects
.all())
165 class PaysForm(forms
.Form
):
166 pays
= forms
.ModelMultipleChoiceField(queryset
=Pays
.objects
.all())
169 class RegionsForm(forms
.Form
):
170 regions
= forms
.ModelMultipleChoiceField(queryset
=Region
.objects
.all())
173 class ThematiquesForm(forms
.Form
):
174 thematiques
= forms
.ModelMultipleChoiceField(
175 queryset
=Thematique
.objects
.all()
179 class DisciplinesForm(forms
.Form
):
180 disciplines
= forms
.ModelMultipleChoiceField(
181 queryset
=Discipline
.objects
.all()
185 class ConfirmationForm(forms
.Form
):