Django WizardForm сохранение модели при использовании нескольких форм
У меня есть модель Клиент:
что довольно много для одной формы, поэтому я разделил ее на несколько форм:
теперь я застрял на построении метода done. В документации не совсем понятно, как это сделать, когда вы используете несколько форм для одной модели.
Я могу сделать customer = form_list[0].save(commit=False)
и затем пройдите по всем остальным полям по очереди:
customer.delivery_street = form_list[1].cleaned_data['delivery_street']
customer.delivery_number = form_list[1].cleaned_data['delivery_number']
но это слишком много и кажется слишком утомительным, чем необходимо.
Как мне это сделать?
views.py:
FORMS = [
("company", CompanyForm),
("addresses", AddressesForm),
("references", ReferenceFormSet),
("contacts", ContactFormSet),
("payment", PaymentForm),
# ("upload", DocumentForm),
]
TEMPLATES = {
"company": "form/step-1.html",
"addresses": "form/step-2.html",
"references": "form/step-3.html",
"contacts": "form/step-4.html",
"payment": "form/step-5.html",
# "upload": "form/step-6.html",
}
class RegisterWizard(SessionWizardView):
def get_template_names(self):
return [TEMPLATES[self.steps.current]]
def render_goto_step(self, *args, **kwargs):
form = self.get_form(data=self.request.POST)
# form = self.get_form(data=self.request.POST, request.FILES)
self.storage.set_step_data(self.steps.current, self.process_step(form))
# self.storage.set_step_files(self.steps.current, self.process_step_files(form))
return super().render_goto_step(*args, **kwargs)
file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'bestanden'))
def get_context_data(self, form, **kwargs):
context = super().get_context_data(form=form, **kwargs)
context.update({'callme_forms': CallMeForms(prefix='callme')})
# context.update({'document_forms': DocumentForm(prefix='document')})
return context
def done(self, form_list, **kwargs):
customer = form_list[0].save(commit=False)
if form_list[1].cleaned_data['different_invoice_address'] is False:
# fill invoice_data with delivery_data
return render(
self.request, 'thank-you.html', {
'form_data': [form.cleaned_data for form in form_list],
}
)
urls.py:
from django.contrib import admin
from django.urls import path
from . import views
from .views import FORMS
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.RegisterWizard.as_view(FORMS), name='index'),
path('thank-you/', views.thank_you, name='thank_you'),
path('privacy-verklaring/', views.privacy_policy, name='privacy_policy'),
path('algemene-voorwaarden/', views.toa, name='toa'),
path('save_callme/', views.save_callme, name='save_callme')
]