Implement a .clean method for the WorkflowAction class.

Pass the view request to the form so that it can be passed to the
WorkflowAction clean method.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2017-08-26 02:55:36 -04:00
parent 4dcaa5f883
commit b63723feaf
3 changed files with 21 additions and 1 deletions

View File

@@ -44,6 +44,10 @@ class WorkflowActionBase(object):
class WorkflowAction(six.with_metaclass(WorkflowActionMetaclass, WorkflowActionBase)):
@classmethod
def clean(cls, request, form_data=None):
return form_data
@classmethod
def get(cls, name):
return cls._registry[name]

View File

@@ -43,6 +43,7 @@ class WorkflowStateActionDynamicForm(DynamicModelForm):
widgets = {'action_data': forms.widgets.HiddenInput}
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
result = super(
WorkflowStateActionDynamicForm, self
).__init__(*args, **kwargs)
@@ -72,7 +73,12 @@ class WorkflowStateActionDynamicForm(DynamicModelForm):
# Store only the ID of a model instance
action_data[field['name']] = action_data[field['name']].pk
data['action_data'] = action_data
data = self.instance.get_class().clean(
form_data=data, request=self.request
)
data['action_data'] = json.dumps(action_data)
return data

View File

@@ -250,6 +250,11 @@ class SetupWorkflowStateActionCreateView(SingleObjectDynamicFormCreateView):
'workflow': self.get_object().workflow
}
def get_form_extra_kwargs(self):
return {
'request': self.request
}
def get_form_schema(self):
return self.get_class()().get_form_schema(request=self.request)
@@ -307,6 +312,11 @@ class SetupWorkflowStateActionEditView(SingleObjectDynamicFormEditView):
'workflow_state': self.get_object().state,
}
def get_form_extra_kwargs(self):
return {
'request': self.request
}
def get_form_schema(self):
return self.get_object().get_class_instance().get_form_schema(
request=self.request
@@ -350,7 +360,7 @@ class SetupWorkflowStateActionListView(SingleObjectListView):
class SetupWorkflowStateActionSelectionView(FormView):
form_class = WorkflowActionSelectionForm
#TODO: access check via workflow edit perm
view_permission = permission_workflow_edit
def form_valid(self, form):
klass = form.cleaned_data['klass']