From d63901ca6c310c678ded53dc81309ac1b38d6e12 Mon Sep 17 00:00:00 2001 From: Todd Dembrey <todd.dembrey@torchbox.com> Date: Sun, 2 Sep 2018 10:47:02 +0100 Subject: [PATCH] Make the parent_page data for unique to the request --- opentech/apply/funds/models/applications.py | 22 ++++++++------------- opentech/apply/funds/wagtail_hooks.py | 6 ++++-- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/opentech/apply/funds/models/applications.py b/opentech/apply/funds/models/applications.py index ac45115d4..13bb3ace9 100644 --- a/opentech/apply/funds/models/applications.py +++ b/opentech/apply/funds/models/applications.py @@ -144,13 +144,6 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm): # type: ignore ObjectList(SubmittableStreamForm.promote_panels, heading='Promote'), ]) - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - # We attached the parent page as part of the before_create_hook - if hasattr(self, 'parent_page'): - self.workflow_name = self.parent_page.workflow_name - self.reviewers = self.parent_page.reviewers.all() - def get_template(self, request, *args, **kwargs): # Make sure all children use the shared template return 'funds/round.html' @@ -169,19 +162,20 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm): # type: ignore def save(self, *args, **kwargs): is_new = not self.id - if is_new and hasattr(self, 'parent_page'): - # Ensure that the workflow hasn't changed - self.workflow_name = self.parent_page.workflow_name + if is_new: + parent_page = self.parent_page[self.__class__][self.title] + self.workflow_name = parent_page.workflow_name + self.reviewers = parent_page.reviewers.all() super().save(*args, **kwargs) - if is_new and hasattr(self, 'parent_page'): + if is_new: # Would be nice to do this using model clusters as part of the __init__ self._copy_forms('forms') self._copy_forms('review_forms') def _copy_forms(self, field): - for form in getattr(self.parent_page, field).all(): + for form in getattr(self.get_parent().specific, field).all(): new_form = self._meta.get_field(field).related_model self._copy_form(form, new_form) @@ -220,10 +214,10 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm): # type: ignore Q(end_date__gte=self.start_date) ) - if hasattr(self, 'parent_page'): + if not self.id: # Check if the create hook has added the parent page, we aren't an object yet. # Ensures we can access related objects during the clean phase instead of save. - base_query = RoundBase.objects.child_of(self.parent_page) + base_query = RoundBase.objects.child_of(self.parent_page[self.__class__][self.title]) else: # don't need parent page, we are an actual object now. base_query = RoundBase.objects.sibling_of(self) diff --git a/opentech/apply/funds/wagtail_hooks.py b/opentech/apply/funds/wagtail_hooks.py index 692b5f04a..30bf699dd 100644 --- a/opentech/apply/funds/wagtail_hooks.py +++ b/opentech/apply/funds/wagtail_hooks.py @@ -10,6 +10,8 @@ modeladmin_register(ApplyAdminGroup) @hooks.register('before_create_page') def before_create_page(request, parent_page, page_class): - if issubclass(page_class, RoundBase): - page_class.parent_page = parent_page + if issubclass(page_class, RoundBase) and request.POST: + if not hasattr(page_class, 'parent_page'): + page_class.parent_page = {} + page_class.parent_page.setdefault(page_class, {})[request.POST['title']] = parent_page return page_class -- GitLab