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')