Python 将来自多个表单的数据合并到Django

Python 将来自多个表单的数据合并到Django,python,django,forms,Python,Django,Forms,我有3种不同的形式,如下所示: class Questions(forms.ModelForm): class Meta: model = Client fields = ['life_areas', 'life_desires', 'life_ambitions',] class BasicContact(forms.ModelForm): class Meta: model = Client f

我有3种不同的形式,如下所示:

class Questions(forms.ModelForm):
    class Meta:
        model = Client
        fields = ['life_areas', 'life_desires', 'life_ambitions',]        

class BasicContact(forms.ModelForm):
    class Meta:
        model = Client
        fields = ['status', 'first_name', 'email_address', 'country',]

class PhoneContact(forms.ModelForm):
    class Meta:
        model = Client
        fields = ['phone_number', 'best_time', 'preferences',]
我创建了一个表单向导,它使用这三个表单收集信息

FORMS = [("questions", Questions),
     ("basiccontact", BasicContact),
     ("phonecontact", PhoneContact),]

class ClientFormWizard(SessionWizardView):
    form_list = FORMS
    def done(self, form_list, form_dict, **kwargs):
        # get data from the forms
        questions = form_dict['questions']
        basiccontact = form_dict['basiccontact']
        phonecontact = form_dict['phonecontact']

        formdata = dict(questions.items() + basiccontact.items() + phonecontact.items())

        clientform = ClientForm(formdata)
        new_client = clientform.save()

        # return redirect(...)
我基本上是尝试将三个表单中的信息连接到一个ClientForm中,然后保存它。但是,我不知道如何将这三个表单中的信息连接起来。我试着用字典的方法做,但没用。实现这种连接的最佳方法是什么

编辑:在阅读表单API文档之后,我终于明白了。以下是我如何汇总3张表格中的信息:

    formdata = dict()
    for f in form_list:
        formdata.update(f.cleaned_data)

表单列表包含所有已提交表单的实例。我们只是提取这些信息并将其放入一个名为formdata的新字典中。之后,它就可以工作了。

使用
一些表单.项目()
,而不是使用
一些表单.已清理的数据
,这将返回一个已验证的POST数据字典

所以,正如你所想,它应该是这样的:

FORMS = [("questions", Questions),
     ("basiccontact", BasicContact),
     ("phonecontact", PhoneContact),]

class ClientFormWizard(SessionWizardView):
    form_list = FORMS
    def done(self, form_list, form_dict, **kwargs):
        # get data from the forms

        form_data = dict()
        for form in form_list:
            form_data.update(form.cleaned_data)

        clientform = ClientForm(form_data)
        new_client = clientform.save()

        # return redirect(...)

通过对同一模型使用三种不同的表单,您试图实现什么?我在这里阅读了wizardforms:。我不知道如何把它分成三组形式。所以基本上你想在不同的时间呈现表单。由于从未使用过表单向导,我不是回答问题的最佳人选,但是如果内存可用,您需要将聚合数据提供给
ClientForm
作为
ClientForm(data=formdata)
是的,但我的问题是我不知道如何聚合数据。如代码所示,我尝试了它,但它不起作用。在不了解SessionWizardView的复杂性的情况下,我可能提供了一个无知的观点,但您始终可以将代码分成三个独立的视图,并在会话中持久化表单数据,最后将其合并。