Skip to content
Snippets Groups Projects
Commit b6fe45d4 authored by Todd Dembrey's avatar Todd Dembrey
Browse files

Refactor the delegated form views to be a bit more robust

parent 1fd90bed
No related branches found
No related tags found
No related merge requests found
<form class="form" method="post" id="{{ form.name }}">
{% csrf_token %}
<div class="form__item">
{{ form }}
</div>
<input class="button button--primary button--top-space" id="{{ form.name }}-submit" name="{{ form_prefix }}{{ form.name }}" type="submit" form="{{ form.name }}" value="{{ value }}">
</form>
...@@ -2,12 +2,6 @@ ...@@ -2,12 +2,6 @@
<div class="modal" id="update-status"> <div class="modal" id="update-status">
<h4>Update status</h4> <h4>Update status</h4>
<p>Current status: {{ object.phase.name }}</p> <p>Current status: {{ object.phase.name }}</p>
<form class="form" method="post" id="progress-form"> {% include 'funds/includes/delegated_form_base.html' with form=progress_form value='Progress'%}
{% csrf_token %}
<div class="form__item">
{{ progress_form }}
</div>
<input class="button button--primary button--top-space" id="progress-form-submit" name="form-submitted" type="submit" form="progress-form" value="Progress">
</form>
</div> </div>
{% endif %} {% endif %}
<div class="modal" id="assign-lead"> <div class="modal" id="assign-lead">
<h4>Assign Lead</h4> <h4>Assign Lead</h4>
<form class="form" method="post" id="update-lead-form"> {% include 'funds/includes/delegated_form_base.html' with form=lead_form value='Update'%}
{% csrf_token %}
<div class="form__item">
{{ lead_form }}
</div>
<input class="button button--primary button--top-space" id="update-form-submit" name="form-submitted" type="submit" form="update-lead-form" value="Update">
</form>
</div> </div>
...@@ -105,11 +105,11 @@ class UpdateLeadView(DelegatedViewMixin, UpdateView): ...@@ -105,11 +105,11 @@ class UpdateLeadView(DelegatedViewMixin, UpdateView):
class AdminSubmissionDetailView(ReviewContextMixin, ActivityContextMixin, DelegateableView): class AdminSubmissionDetailView(ReviewContextMixin, ActivityContextMixin, DelegateableView):
template_name_suffix = '_admin_detail' template_name_suffix = '_admin_detail'
model = ApplicationSubmission model = ApplicationSubmission
form_views = { form_views = [
'progress': ProgressSubmissionView, ProgressSubmissionView,
'comment': CommentFormView, CommentFormView,
'update': UpdateLeadView, UpdateLeadView,
} ]
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
other_submissions = self.model.objects.filter(user=self.object.user).current().exclude(id=self.object.id) other_submissions = self.model.objects.filter(user=self.object.user).current().exclude(id=self.object.id)
......
...@@ -19,9 +19,12 @@ class ViewDispatcher(View): ...@@ -19,9 +19,12 @@ class ViewDispatcher(View):
class DelegateableView(DetailView): class DelegateableView(DetailView):
"""A view which passes its context to child form views to allow them to post to the same URL """ """A view which passes its context to child form views to allow them to post to the same URL """
form_prefix = 'form-submitted-'
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
forms = dict(form_view.contribute_form(self.object, self.request.user) for form_view in self.form_views.values()) forms = dict(form_view.contribute_form(self.object, self.request.user) for form_view in self.form_views)
return super().get_context_data( return super().get_context_data(
form_prefix=self.form_prefix,
**forms, **forms,
**kwargs, **kwargs,
) )
...@@ -35,10 +38,12 @@ class DelegateableView(DetailView): ...@@ -35,10 +38,12 @@ class DelegateableView(DetailView):
kwargs['template_names'] = self.get_template_names() kwargs['template_names'] = self.get_template_names()
kwargs['context'] = self.get_context_data() kwargs['context'] = self.get_context_data()
form_submitted = request.POST['form-submitted'].lower() for form_view in self.form_views:
view = self.form_views[form_submitted].as_view() if self.form_prefix + form_view.context_name in request.POST:
return form_view.as_view()(request, *args, **kwargs)
return view(request, *args, **kwargs) # Fall back to get if not form exists as submitted
return self.get(request, *args, **kwargs)
class DelegatedViewMixin(View): class DelegatedViewMixin(View):
...@@ -51,6 +56,11 @@ class DelegatedViewMixin(View): ...@@ -51,6 +56,11 @@ class DelegatedViewMixin(View):
kwargs['user'] = self.request.user kwargs['user'] = self.request.user
return kwargs return kwargs
def get_form(self, *args, **kwargs):
form = super().get_form(*args, **kwargs)
form.name = self.context_name
return form
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
# Use the previous context but override the validated form # Use the previous context but override the validated form
form = kwargs.pop('form') form = kwargs.pop('form')
...@@ -60,4 +70,6 @@ class DelegatedViewMixin(View): ...@@ -60,4 +70,6 @@ class DelegatedViewMixin(View):
@classmethod @classmethod
def contribute_form(cls, submission, user): def contribute_form(cls, submission, user):
return cls.context_name, cls.form_class(instance=submission, user=user) form = cls.form_class(instance=submission, user=user)
form.name = cls.context_name
return cls.context_name, form
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment