Django сохраняет несколько форм - какой компактный способ это сделать?

Есть ли более компактный способ написать это на Python / Django?

Я еще не закончил эту работу, но вижу, что она быстро разрастается, поскольку мне нужно включить дополнительные ветви для 3 других значений form7.clean_data.get('working_type_selection') == '3 other Options', кроме 'Employee'. Если это Employee, то сохраняется форма 8, иначе это может быть форма 9 или форма 10.

Сохранение форм должно быть заключительным шагом каждой ветки, верно?

   if form1.is_valid() and form2.is_valid():
        if form2.cleaned_data.get('right_to_work_selection') == 'Passport' and form3.is_valid():
            if form7.cleaned_data.get('working_type_selection') == 'Employee' and form8.is_valid():
               form1.save()

               form2.save()
               form3.save()
                
               form7.save()
               form8.save()
            return redirect('profile_employment')
        if form2.cleaned_data.get('right_to_work_selection') == 'Birth Certificate & N.I. Number' and form4.is_valid() and form6.is_valid():
            if form7.cleaned_data.get('working_type_selection') == 'Employee' and form8.is_valid():
               form1.save()

               form2.save()
               form4.save()
               form6.save()

               form7.save()
               form8.save()
        return redirect('profile_employment')
    if form2.cleaned_data.get('right_to_work_selection') == 'Certificate of Registration & N.I. Number' and form5.is_valid() and form6.is_valid():
        if form7.cleaned_data.get('working_type_selection') == 'Employee' and form8.is_valid():
               form1.save()

               form2.save()
               form5.save()
               form6.save()
            
               form7.save()
               form8.save()
        return redirect('profile_employment')

Вы можете организовать формы, которые необходимо проверить и сохранить, в словарь.


forms = {
  "Passport": {
       "Validation": (form3,),
       "Save": (form1, form2, form3, form7, form8),
   },
   "Birth Certificate & N.I. Number": {
       "Validation": (form4, form6),
       "Save": (form1, form2, form4, form6, form7, form8),
   },
   "Certificate of Registration & N.I. Number": {
       "Validation": (form6,),
       "Save": (form1, form2, form5, form6, form7, form8),
   },
}

if form1.is_valid() and form2.is_valid():
    selection = form2.cleaned_data.get('right_to_work_selection')
    if all([f.is_valid() for f in forms[selection]["Validation"]) and \
       form7.cleaned_data.get('working_type_selection') == 'Employee' and \
       form8.is_valid():
        for form in forms[selection]["Save"]:
            form.save()

        return redirect('profile_employment')
Вернуться на верх