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')
]
Вернуться на верх