Moved most form field initial values from forms to settings.

This commit is contained in:
2018-02-20 17:19:15 +01:00
parent 1d574ddf85
commit 5bb2edc749
5 changed files with 226 additions and 128 deletions

View File

@@ -16,6 +16,7 @@ DEFAULT_SETTINGS = (
DefaultSetting('group_publish_incremental', None), DefaultSetting('group_publish_incremental', None),
DefaultSetting('forms_development_init', False), DefaultSetting('forms_development_init', False),
DefaultSetting('matrix_config', ImproperlyConfigured), DefaultSetting('matrix_config', ImproperlyConfigured),
DefaultSetting('form_initials', dict()),
) )

View File

@@ -1,8 +1,11 @@
import importlib import importlib
import logging
import re import re
from django.apps import AppConfig as _AppConfig from django.apps import AppConfig as _AppConfig
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
logger = logging.getLogger(__name__)
# Form and Model Field Config # Form and Model Field Config
COMMON_CHAR_FIELD_LENGTH = 250 COMMON_CHAR_FIELD_LENGTH = 250
NUMBER_MAX_LENGTH = 12 NUMBER_MAX_LENGTH = 12
@@ -18,6 +21,69 @@ MEALS_OTHER_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH
ADDITIONAL_COSTS_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH ADDITIONAL_COSTS_MAX_LENGTH = COMMON_CHAR_FIELD_LENGTH
class FieldInitial(object):
_constraint_re = re.compile(r'^(?P<field>[a-z_]+)(?P<op>[=]+)(?P<value>.*)$')
def __init__(self, *args):
self._tuples = []
if len(args) == 1:
self._tuples = [(None, args[0])]
else:
constraint = None
for arg in args:
if constraint is None:
constraint = arg
else:
self._tuples.append((constraint, arg))
constraint = None
def get_value(self, session_data):
parameters = {
'mode': session_data.get('mode', None),
'sport': session_data.get('sport', None),
'level': session_data.get('level', None),
'country': session_data.get('country', None),
'terrain': session_data.get('terrain', None),
'overnight': str(bool(session_data.get('last_day', None))),
}
for tuple in self._tuples:
constraint, result = tuple
if not constraint:
return result
match = False
constraint_parts = constraint.split(',')
for sub_constraint in constraint_parts:
c = self._constraint_re.match(sub_constraint)
if c is not None:
c_field = c.group('field')
if c_field not in parameters:
logger.error('FieldInitial: Invalid field: \'%s\'', sub_constraint)
continue
c_op = c.group('op')
c_value = c.group('value')
if c_op == '==':
if parameters[c_field] == c_value:
match = True
continue
else:
match = False
break
else:
logger.error('FieldInitial: Invalid operator: \'%s\'', sub_constraint)
continue
else:
logger.error('FieldInitial: Invalid constraint: \'%s\'', constraint)
break
if match:
return result
return None
class DefaultSetting(object): class DefaultSetting(object):
def __init__(self, name, value, key_name=None, validator=None): def __init__(self, name, value, key_name=None, validator=None):
self.name = name self.name = name

View File

@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from dav_events.config import FieldInitial
# E-Mails # E-Mails
ENABLE_EMAIL_NOTIFICATIONS = False ENABLE_EMAIL_NOTIFICATIONS = False
@@ -128,3 +129,146 @@ MATRIX_CONFIG = {
'max_participants': 4, 'max_participants': 4,
}, },
} }
FORM_INITIALS = {
'ModeForm': {
'mode': FieldInitial('joint'),
'sport': FieldInitial('W'),
'level': FieldInitial('beginner'),
},
'LocationForm': {
'country': FieldInitial(
'sport==B',
'FR',
'sport==S,overnight==True',
'AT',
'sport==W,overnight==True',
'AT',
'',
'DE',
),
'terrain': FieldInitial(
'sport==B',
'alpine',
'sport==K',
'crag',
'sport==S,overnight==True',
'alpine',
'sport==W,overnight==True',
'alpine',
'',
'submountains',
),
},
'ApproachForm': {
'transport': FieldInitial(
'sport==M,country==DE,terrain==submountains',
'public',
'sport==W,country==DE,terrain==submountains',
'public',
),
'meeting_point': FieldInitial(
'sport==M,country==DE,terrain==submountains',
'hbf',
'sport==W,country==DE,terrain==submountains',
'hbf',
),
'accommodation': FieldInitial('terrain==alpine', 'hut'),
'meals': FieldInitial('NONE'),
},
'RequirementsForm': {
'equipment': FieldInitial(
'sport==B',
_(u'Steigeisen*, Pickel*, Klettergurt*, Steinschlaghelm*,'
u' Gletscherbrille, wasserfeste Kleidung, Gamaschen'
u' (* Ausrüstung kann ggf. von der Sektion geliehen werden)'),
'sport==K',
_(u'Kletterschuhe, Hüftgurt*, Steinschlaghelm*'
u' (* Ausrüstung kann ggf. von der Sektion geliehen werden)'),
'sport==M',
_(u'Funktionstüchtiges MTB (bitte vorher überprüfen), Fahrrad-Helm'
u' und Radhandschuhe sind zwingend erforderlich,'
u' Brille und Protektoren empfehlenswert.'
u' Die Sattelstütze muss sich tief versenken lassen.'),
'sport==S',
_(u'Komplette Skitourenausrüstung inkl. Ski, Lawinen-Pieps*, Schaufel* und Sonde*'
u' (* Ausrüstung kann ggf. von der Sektion geliehen werden)'),
'sport==W,terrain==alpine',
_(u'Feste, knöchelhohe Wanderschuhe, Regenschutz'),
'sport==W',
_(u'Festes Schuhwerk, Regenschutz'),
),
'requirements': FieldInitial(
'sport==B,level==beginner',
_(u'Kondition für ganztätige Aktivität im Freien'
u' mit Auf- und Abstiegen bis zu 1000 Hm.'),
'sport==B',
_(u'Sicheres Vorsteigen am Fels im 4. Grad UIAA.'
u' Grundkentnisse Hochtouren, Spaltenbergung.'
u' Kondition für Auf- und Abstiege bis zu 1300 Hm.'),
'sport==K,level==beginner',
_(u'Sicheres Klettern im 4. Grad UIAA.'
u' Beherrschen der Sicherungstechnik.'),
'sport==K',
_(u'Sicheres Vorsteigen am Fels im 5. Grad UIAA.'
u' Beherrschen der Sicherungs- und Abseiltechnik.'),
'sport==M,level==beginner',
_(u'Kondition für Radtouren bis 30 km und 500 Hm'
u' in ca. 3 Stunden.'),
'sport==M',
_(u'Kondition für Radtouren bis 60 km und 1000 Hm'
u' in ca. 5 Stunden.'
u' Sicheres Beherrschen von Trails der Schwierigkeit S1.'),
'sport==S,level==beginner',
_(u'Sicheres Skifahren und erste Erfahrungen abseits'
u' der gespurten Piste.'),
'sport==S',
_(u'Mittelschwere, lange Skitouren bis 1500 Hm.'
u' Solide Aufstiegs- und Abfahrtstechnik.'),
'sport==W,terrain==alpine',
_(u'Kondition für 20km und 600 Hm in ca. 7 Stunden Gehzeit.'
u' Trittsicherheit (mittelschwere Wege).'),
'sport==W',
_(u'Gehzeit X-Y Stunden, ca. X km, ca. X Hm'),
),
},
'RegistrationForm': {
'deadline': FieldInitial('OTHER'),
'registration_howto': FieldInitial(
'sport==B',
_(u'Anmeldung mit Vor- und Nachname, E-Mail-Adresse, Telefonnummer (Mobil),'
u' Notfall-Kontakt, DAV-Mitgliedsnummer'
u' sowie Beschreibung der eigenen Bergerfahrung'
u' bei %(name)s (%(emailaddr)s).'),
'sport==K,terrain==alpine',
_(u'Anmeldung mit Vor- und Nachname, E-Mail-Adresse, Telefonnummer (Mobil),'
u' Notfall-Kontakt, DAV-Mitgliedsnummer'
u' sowie Beschreibung der eigenen Fels- bzw. Bergerfahrung'
u' bei %(name)s (%(emailaddr)s).'),
'sport==K',
_(u'Anmeldung mit Vor- und Nachname, E-Mail-Adresse, Telefonnummer (Mobil),'
u' DAV-Mitgliedsnummer'
u' sowie Beschreibung der eigenen Klettererfahrung'
u' bei %(name)s (%(emailaddr)s).'),
'sport==M,terrain==alpine',
_(u'Anmeldung mit Vor- und Nachname, E-Mail-Adresse, Telefonnummer (Mobil),'
u' Notfall-Kontakt, DAV-Mitgliedsnummer'
u' sowie kurzer Beschreibung der eigenen MTB-Erfahrung'
u' bei %(name)s (%(emailaddr)s).'),
'sport==M',
_(u'Anmeldung mit Vor- und Nachname, E-Mail-Adresse, Telefonnummer (Mobil),'
u' DAV-Mitgliedsnummer'
u' sowie kurzer Beschreibung der eigenen MTB-Erfahrung'
u' bei %(name)s (%(emailaddr)s).'),
'sport==S',
_(u'Anmeldung mit Vor- und Nachname, E-Mail-Adresse, Telefonnummer (Mobil),'
u' Notfall-Kontakt, DAV-Mitgliedsnummer'
u' sowie Beschreibung der eigenen Skitouren- und Bergerfahrung'
u' bei %(name)s (%(emailaddr)s).'),
'terrain==alpine',
_(u'Anmeldung mit Vor- und Nachname, E-Mail-Adresse, Telefonnummer (Mobil),'
u' Notfall-Kontakt und DAV-Mitgliedsnummer'
u' bei %(name)s (%(emailaddr)s).'),
),
},
}

View File

@@ -83,17 +83,17 @@ class EventCreateForm(ChainedForm):
ski_lift = session_data.get('ski_lift', False) ski_lift = session_data.get('ski_lift', False)
terrain = session_data.get('terrain', None) terrain = session_data.get('terrain', None)
country = session_data.get('country', None) country = session_data.get('country', None)
last_day = session_data.get('last_day', None) overnight = bool(session_data.get('last_day', None))
if sport == 'S' and ski_lift: if sport == 'S' and ski_lift:
matrix_key = 'K' matrix_key = 'K'
elif sport == 'W' and not last_day: elif sport == 'W' and not overnight:
matrix_key = '0' matrix_key = '0'
elif sport == 'W' and terrain != 'alpine': elif sport == 'W' and terrain != 'alpine':
matrix_key = 'A' matrix_key = 'A'
elif sport == 'W': elif sport == 'W':
matrix_key = 'B' matrix_key = 'B'
elif terrain != 'alpine' and not last_day: elif terrain != 'alpine' and not overnight:
matrix_key = 'C' matrix_key = 'C'
elif terrain != 'alpine': elif terrain != 'alpine':
matrix_key = 'D' matrix_key = 'D'
@@ -118,12 +118,10 @@ class ModeForm(EventCreateForm):
_next_form_name = 'LocationForm' _next_form_name = 'LocationForm'
mode = forms.ChoiceField(choices=choices.MODE_CHOICES, mode = forms.ChoiceField(choices=choices.MODE_CHOICES,
initial='joint',
label=_(u'Veranstaltungsart'), label=_(u'Veranstaltungsart'),
widget=forms.RadioSelect()) widget=forms.RadioSelect())
sport = forms.ChoiceField(choices=choices.SPORT_CHOICES, sport = forms.ChoiceField(choices=choices.SPORT_CHOICES,
initial='W',
label=_(u'Spielart'), label=_(u'Spielart'),
widget=forms.RadioSelect()) widget=forms.RadioSelect())
@@ -133,7 +131,6 @@ class ModeForm(EventCreateForm):
) )
level = forms.ChoiceField(choices=choices.LEVEL_CHOICES, level = forms.ChoiceField(choices=choices.LEVEL_CHOICES,
initial='beginner',
label=_(u'Schwierigkeitsnivau'), label=_(u'Schwierigkeitsnivau'),
widget=forms.RadioSelect()) widget=forms.RadioSelect())
@@ -258,11 +255,9 @@ class LocationForm(EventCreateForm):
_next_form_name = 'ApproachForm' _next_form_name = 'ApproachForm'
country = LazyTypedChoiceField(choices=choices.COUNTRY_CHOICES, country = LazyTypedChoiceField(choices=choices.COUNTRY_CHOICES,
initial='DE',
label=_(u'Land')) label=_(u'Land'))
terrain = forms.ChoiceField(choices=choices.TERRAIN_CHOICES, terrain = forms.ChoiceField(choices=choices.TERRAIN_CHOICES,
initial='submountains',
label=_(u'Gelände'), label=_(u'Gelände'),
help_text=_(u'Relevant für die Vorauswahl weiterer Felder.'), help_text=_(u'Relevant für die Vorauswahl weiterer Felder.'),
) )
@@ -286,28 +281,18 @@ class LocationForm(EventCreateForm):
sport = session_data.get('sport', None) sport = session_data.get('sport', None)
last_day = session_data.get('last_day', None) last_day = session_data.get('last_day', None)
if sport == 'B': if sport == 'B':
self.fields['terrain'].initial = 'alpine'
self.fields['country'].initial = 'FR'
self.fields['location'].widget.attrs['placeholder'] = u'z.B. Chamonix, Mont-Blanc-Gruppe' self.fields['location'].widget.attrs['placeholder'] = u'z.B. Chamonix, Mont-Blanc-Gruppe'
elif sport == 'K': elif sport == 'K':
self.fields['terrain'].initial = 'crag'
self.fields['location'].widget.attrs['placeholder'] = u'z.B. Battert, Baden-Baden' self.fields['location'].widget.attrs['placeholder'] = u'z.B. Battert, Baden-Baden'
elif sport == 'M': elif sport == 'M':
self.fields['terrain'].initial = 'submountains'
self.fields['location'].widget.attrs['placeholder'] = u'z.B. Pfälzerwald' self.fields['location'].widget.attrs['placeholder'] = u'z.B. Pfälzerwald'
elif sport == 'S' and last_day: elif sport == 'S' and last_day:
self.fields['terrain'].initial = 'alpine'
self.fields['country'].initial = 'AT'
self.fields['location'].widget.attrs['placeholder'] = u'z.B. Obergurgl, Ötztaler Alpen' self.fields['location'].widget.attrs['placeholder'] = u'z.B. Obergurgl, Ötztaler Alpen'
elif sport == 'S': elif sport == 'S':
self.fields['terrain'].initial = 'submountains'
self.fields['location'].widget.attrs['placeholder'] = u'z.B. Todtnau, Schwarzwald' self.fields['location'].widget.attrs['placeholder'] = u'z.B. Todtnau, Schwarzwald'
elif sport == 'W' and last_day: elif sport == 'W' and last_day:
self.fields['terrain'].initial = 'alpine'
self.fields['country'].initial = 'AT'
self.fields['location'].widget.attrs['placeholder'] = u'z.B. Ötztaler Alpen' self.fields['location'].widget.attrs['placeholder'] = u'z.B. Ötztaler Alpen'
elif sport == 'W': elif sport == 'W':
self.fields['terrain'].initial = 'submountains'
self.fields['location'].widget.attrs['placeholder'] = u'z.B. Maikammer, Pfalz' self.fields['location'].widget.attrs['placeholder'] = u'z.B. Maikammer, Pfalz'
@@ -382,7 +367,6 @@ class ApproachForm(EventCreateForm):
) )
meals = forms.ChoiceField(choices=choices.MEALS_CHOICES, meals = forms.ChoiceField(choices=choices.MEALS_CHOICES,
initial='NONE',
label=_(u'Verpflegung'), label=_(u'Verpflegung'),
) )
meals_other = forms.CharField(required=False, meals_other = forms.CharField(required=False,
@@ -394,9 +378,6 @@ class ApproachForm(EventCreateForm):
super(ApproachForm, self)._proceed_session_data(session_data) super(ApproachForm, self)._proceed_session_data(session_data)
last_day = session_data.get('last_day', None) last_day = session_data.get('last_day', None)
sport = session_data.get('sport', None)
country = session_data.get('country', None)
terrain = session_data.get('terrain', None)
self.fields['transport_other'].widget.attrs['placeholder'] = _(u'Nebenstehendes Feld beachten') self.fields['transport_other'].widget.attrs['placeholder'] = _(u'Nebenstehendes Feld beachten')
self.fields['meeting_point_other'].widget.attrs['placeholder'] = _(u'Nebenstehendes Feld beachten') self.fields['meeting_point_other'].widget.attrs['placeholder'] = _(u'Nebenstehendes Feld beachten')
@@ -404,14 +385,6 @@ class ApproachForm(EventCreateForm):
self.fields['accommodation_other'].widget.attrs['placeholder'] = _(u'Nebenstehendes Feld beachten') self.fields['accommodation_other'].widget.attrs['placeholder'] = _(u'Nebenstehendes Feld beachten')
self.fields['meals_other'].widget.attrs['placeholder'] = _(u'Nebenstehendes Feld beachten') self.fields['meals_other'].widget.attrs['placeholder'] = _(u'Nebenstehendes Feld beachten')
if terrain == 'alpine':
self.fields['accommodation'].initial = 'hut'
if sport in ('M', 'W'):
if country == 'DE' and terrain == 'submountains':
self.fields['transport'].initial = 'public'
self.fields['meeting_point'].initial = 'hbf'
if not last_day: if not last_day:
self.fields['basecamp'].widget = forms.HiddenInput() self.fields['basecamp'].widget = forms.HiddenInput()
self.fields['accommodation'].widget = forms.HiddenInput() self.fields['accommodation'].widget = forms.HiddenInput()
@@ -476,70 +449,6 @@ class RequirementsForm(EventCreateForm):
}, },
bootstrap_version=3)) bootstrap_version=3))
def _proceed_session_data(self, session_data):
super(RequirementsForm, self)._proceed_session_data(session_data)
sport = session_data.get('sport', None)
level = session_data.get('level', None)
terrain = session_data.get('terrain', None)
if sport == 'B':
self.fields['equipment'].initial = u'%s (%s)' % (
_(u'Steigeisen*, Pickel*, Klettergurt*, Steinschlaghelm*,'
u' Gletscherbrille, wasserfeste Kleidung, Gamaschen'),
_(u'* Ausrüstung kann ggf. von der Sektion geliehen werden')
)
if level == 'beginner':
self.fields['requirements'].initial = _(u'Kondition für ganztätige Aktivität im Freien'
u' mit Auf- und Abstiegen bis zu 1000 Hm.')
else:
self.fields['requirements'].initial = _(u'Sicheres Vorsteigen am Fels im 4. Grad UIAA.'
u' Grundkentnisse Hochtouren, Spaltenbergung.'
u' Kondition für Auf- und Abstiege bis zu 1300 Hm.')
elif sport == 'K':
self.fields['equipment'].initial = u'%s (%s)' % (
_(u'Kletterschuhe, Hüftgurt*, Steinschlaghelm*'),
_(u'* Ausrüstung kann ggf. von der Sektion geliehen werden')
)
if level == 'beginner':
self.fields['requirements'].initial = _(u'Sicheres Klettern im 4. Grad UIAA.'
u' Beherrschen der Sicherungstechnik.')
else:
self.fields['requirements'].initial = _(u'Sicheres Vorsteigen am Fels im 5. Grad UIAA.'
u' Beherrschen der Sicherungs- und Abseiltechnik.')
elif sport == 'M':
self.fields['equipment'].initial = _(u'Funktionstüchtiges MTB (bitte vorher überprüfen), Fahrrad-Helm'
u' und Radhandschuhe sind zwingend erforderlich,'
u' Brille und Protektoren empfehlenswert.'
u' Die Sattelstütze muss sich tief versenken lassen.')
if level == 'beginner':
self.fields['requirements'].initial = _(u'Kondition für Radtouren bis 30 km und 500 Hm'
u' in ca. 3 Stunden.')
else:
self.fields['requirements'].initial = _(u'Kondition für Radtouren bis 60 km und 1000 Hm'
u' in ca. 5 Stunden.'
u' Sicheres Beherrschen von Trails der Schwierigkeit S1.')
elif sport == 'S':
self.fields['equipment'].initial = u'%s (%s)' % (
_(u'Komplette Skitourenausrüstung inkl. Ski, Lawinen-Pieps*, Schaufel* und Sonde*'),
_(u'* Ausrüstung kann ggf. von der Sektion geliehen werden')
)
if level == 'beginner':
self.fields['requirements'].initial = _(u'Sicheres Skifahren und erste Erfahrungen abseits'
u' der gespurten Piste.')
else:
self.fields['requirements'].initial = _(u'Mittelschwere, lange Skitouren bis 1500 Hm.'
u' Solide Aufstiegs- und Abfahrtstechnik.')
elif sport == 'W':
if terrain == 'alpine':
self.fields['equipment'].initial = _(u'Feste, knöchelhohe Wanderschuhe, Regenschutz')
self.fields['requirements'].initial = _(u'Kondition für 20km und 600 Hm in ca. 7 Stunden Gehzeit.'
u' Trittsicherheit (mittelschwere Wege).')
else:
self.fields['equipment'].initial = _(u'Festes Schuhwerk, Regenschutz')
self.fields['requirements'].initial = _(u'Gehzeit X-Y Stunden, ca. X km, ca. X Hm')
class DescriptionForm(EventCreateForm): class DescriptionForm(EventCreateForm):
_form_title = _(u'Titel / Beschreibung') _form_title = _(u'Titel / Beschreibung')
@@ -664,7 +573,6 @@ class RegistrationForm(EventCreateForm):
label=_(u'Max. Teilnehmer')) label=_(u'Max. Teilnehmer'))
deadline = forms.ChoiceField(choices=choices.DEADLINE_CHOICES, deadline = forms.ChoiceField(choices=choices.DEADLINE_CHOICES,
initial='OTHER',
label=_(u'Anmeldeschluss'), label=_(u'Anmeldeschluss'),
widget=forms.RadioSelect()) widget=forms.RadioSelect())
@@ -697,8 +605,6 @@ class RegistrationForm(EventCreateForm):
def _proceed_session_data(self, session_data): def _proceed_session_data(self, session_data):
super(RegistrationForm, self)._proceed_session_data(session_data) super(RegistrationForm, self)._proceed_session_data(session_data)
sport = session_data.get('sport', None)
terrain = session_data.get('terrain', None)
first_day = session_data.get('first_day', None) first_day = session_data.get('first_day', None)
trainer_fullname = u'%s %s' % (session_data.get('trainer_firstname'), session_data.get('trainer_familyname')) trainer_fullname = u'%s %s' % (session_data.get('trainer_firstname'), session_data.get('trainer_familyname'))
trainer_email = session_data.get('trainer_email') trainer_email = session_data.get('trainer_email')
@@ -738,36 +644,10 @@ class RegistrationForm(EventCreateForm):
new_choices.append((key, desc)) new_choices.append((key, desc))
self.fields['deadline'].choices = new_choices self.fields['deadline'].choices = new_choices
registration_howto = _(u'Anmeldung mit Vor- und Nachname, E-Mail-Adresse, Telefonnummer (Mobil)' if self.fields['registration_howto'].initial:
u'%(additional)s bei %(name)s (%(emailaddr)s).') initial = self.fields['registration_howto'].initial % {'name': trainer_fullname,
additional = u'' 'emailaddr': trainer_email}
if sport == 'B': self.fields['registration_howto'].initial = initial
additional = u'%s %s' % (_(u', Notfall-Kontakt, DAV-Mitgliedsnummer'),
_(u'sowie Beschreibung der eigenen Bergerfahrung'))
elif sport == 'K' and terrain == 'alpine':
additional = u'%s %s' % (_(u', Notfall-Kontakt, DAV-Mitgliedsnummer'),
_(u'sowie Beschreibung der eigenen Fels- bzw. Bergerfahrung'))
elif sport == 'K':
additional = u'%s %s' % (_(u', DAV-Mitgliedsnummer'),
_(u'sowie Beschreibung der eigenen Klettererfahrung'))
elif sport == 'M' and terrain == 'alpine':
additional = u'%s %s' % (_(u', Notfall-Kontakt, DAV-Mitgliedsnummer'),
_(u'sowie kurzer Beschreibung der eigenen MTB-Erfahrung'))
elif sport == 'M':
additional = u'%s %s' % (_(u', DAV-Mitgliedsnummer'),
_(u'sowie kurzer Beschreibung der eigenen MTB-Erfahrung'))
elif sport == 'S':
additional = u'%s %s' % (_(u', Notfall-Kontakt, DAV-Mitgliedsnummer'),
_(u'sowie Beschreibung der eigenen Skitouren- und Bergerfahrung'))
elif terrain == 'alpine':
additional = _(u', Notfall-Kontakt und DAV-Mitgliedsnummer')
else:
registration_howto = None
if registration_howto:
self.fields['registration_howto'].initial = registration_howto % {'name': trainer_fullname,
'emailaddr': trainer_email,
'additional': additional}
else: else:
self.fields['registration_howto'].widget = forms.HiddenInput() self.fields['registration_howto'].widget = forms.HiddenInput()

View File

@@ -1,10 +1,12 @@
import logging import logging
from django import forms from django import forms
from django.apps import apps
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from .. import converters from .. import converters
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
app_config = apps.get_containing_app_config(__package__)
class ChainedForm(forms.Form): class ChainedForm(forms.Form):
@@ -40,7 +42,12 @@ class ChainedForm(forms.Form):
self._session_data[k] = self._deserialize_value(session_data[k]) self._session_data[k] = self._deserialize_value(session_data[k])
def _proceed_session_data(self, session_data): def _proceed_session_data(self, session_data):
pass form_initials = app_config.settings.form_initials.get(self.__class__.__name__, dict())
for fieldname in self.fields:
if fieldname in form_initials:
value = form_initials[fieldname].get_value(session_data)
if value is not None:
self.fields[fieldname].initial = value
def _save_session_data(self): def _save_session_data(self):
if self._request is not None and hasattr(self._request, 'session'): if self._request is not None and hasattr(self._request, 'session'):