Skip to content
Snippets Groups Projects
forms.py 1.39 KiB
Newer Older
  • Learn to ignore specific revisions
  • from wagtail.wagtailadmin.forms import WagtailAdminPageForm
    
    
    class WorkflowFormAdminForm(WagtailAdminPageForm):
        def clean(self):
            cleaned_data = super().clean()
    
    Todd Dembrey's avatar
    Todd Dembrey committed
            model = self._meta.model
    
    
            from .models import WORKFLOW_CLASS
            workflow = WORKFLOW_CLASS[model.WORKFLOWS[cleaned_data['workflow']]]
    
            application_forms = self.formsets['forms']
    
            self.validate_stages_equal_forms(workflow, application_forms)
    
    
        def validate_stages_equal_forms(self, workflow, application_forms):
            if application_forms.is_valid():
                valid_forms = [form for form in application_forms if not form.cleaned_data['DELETE']]
                number_of_forms = len(valid_forms)
                plural_form = 's' if number_of_forms > 1 else ''
    
                number_of_stages = len(workflow.stage_classes)
                plural_stage = 's' if number_of_stages > 1 else ''
    
                if number_of_forms != number_of_stages:
                    self.add_error(
                        None,
                        'Number of forms does not match number of stages: '
                        f'{number_of_stages} stage{plural_stage} and {number_of_forms} '
                        f'form{plural_form} provided',
                    )
    
                    for form in valid_forms[number_of_stages:]:
                        form.add_error('form', 'Exceeds required number of forms for stage, please remove.')