Moved event specific code from ChainedForm to EventCreateForm via

ModelMixin.
This commit is contained in:
2018-02-25 17:04:32 +01:00
parent b1cdfe4803
commit e669d5b55b
3 changed files with 36 additions and 30 deletions

View File

@@ -12,7 +12,7 @@ from datetimewidget.widgets import DateWidget, TimeWidget, DateTimeWidget
from .. import choices from .. import choices
from .. import config from .. import config
from .. import models from .. import models
from .generic import ChainedForm from .generic import ChainedForm, ModelMixin
app_config = apps.get_containing_app_config(__package__) app_config = apps.get_containing_app_config(__package__)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -74,10 +74,21 @@ class EventUpdateForm(forms.ModelForm):
'published', 'published_at', 'published_by',) 'published', 'published_at', 'published_by',)
class EventCreateForm(ChainedForm): class EventCreateForm(ModelMixin, ChainedForm):
_model = models.Event _model = models.Event
_initial_form_name = 'ModeForm' _initial_form_name = 'ModeForm'
def _get_instance_kwargs(self):
kwargs = self._session_data.copy()
if 'deadline' in kwargs:
buf = kwargs['deadline']
if isinstance(buf, basestring):
deadline_choice = buf.lower()
deadline_field = 'deadline_{}'.format(deadline_choice)
if deadline_field in kwargs:
kwargs['deadline'] = kwargs[deadline_field]
return kwargs
def _get_matrix_config(self, session_data): def _get_matrix_config(self, session_data):
mode = session_data.get('mode', None) mode = session_data.get('mode', None)
sport = session_data.get('sport', None) sport = session_data.get('sport', None)

View File

@@ -56,15 +56,6 @@ class ChainedForm(forms.Form):
self._session_data.update(self.cleaned_data) self._session_data.update(self.cleaned_data)
self._save_session_data() self._save_session_data()
def _get_model(self):
if not hasattr(self, '_model'):
raise ImproperlyConfigured('{cls} is missing a Model.'
' Define {cls}._model'.format(cls=self.__class__.__name__))
return self._model
def _get_object(self, model_kwargs):
return self._get_model()(**model_kwargs)
@property @property
def form_name(self): def form_name(self):
return self.__class__.__name__ return self.__class__.__name__
@@ -111,27 +102,31 @@ class ChainedForm(forms.Form):
value = app_config.settings.form_initials[form_name][field_name].get_value(self._session_data) value = app_config.settings.form_initials[form_name][field_name].get_value(self._session_data)
return value return value
def save(self):
object_kwargs = dict()
data = self._session_data.copy()
if 'deadline' in data:
buf = data['deadline']
if isinstance(buf, basestring):
deadline_choice = buf.lower()
deadline_field = 'deadline_{}'.format(deadline_choice)
if deadline_field in data:
data['deadline'] = data[deadline_field]
model = self._get_model()
for field in data:
if hasattr(model, field):
object_kwargs[field] = data[field]
return self._get_object(object_kwargs)
def flush_session_data(self): def flush_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'):
session_var_name = '{}_chained_form_session_data'.format(self._request.resolver_match.url_name) session_var_name = '{}_chained_form_session_data'.format(self._request.resolver_match.url_name)
if session_var_name in self._request.session: if session_var_name in self._request.session:
del self._request.session[session_var_name] del self._request.session[session_var_name]
self._session_data = dict() self._session_data = dict()
class ModelMixin(object):
_model = None
def _get_model(self):
if not self._model:
raise ImproperlyConfigured('{cls} is missing a Model.'
' Define {cls}._model'.format(cls=self.__class__.__name__))
return self._model
def _get_instance_kwargs(self):
return self.cleaned_data
def get_instance(self):
model = self._get_model()
kwargs1 = self._get_instance_kwargs()
kwargs2 = dict()
for attr in kwargs1:
if hasattr(model, attr):
kwargs2[attr] = kwargs1[attr]
return model(**kwargs2)

View File

@@ -256,7 +256,7 @@ class EventCreateView(generic.FormView):
return context return context
def form_valid(self, form): def form_valid(self, form):
event = form.save() event = form.get_instance()
next_form_name = form.next_form_name next_form_name = form.next_form_name
if next_form_name: if next_form_name: