Moved event specific code from ChainedForm to EventCreateForm via
ModelMixin.
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user