结合多种形式的数据

2024-04-24 00:57:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有三种不同的形式:

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的新字典里。在那之后,它就起作用了。你知道吗


Tags: formclient信息表单fieldsmodelformsdict
1条回答
网友
1楼 · 发布于 2024-04-24 00:57:57

不要使用some_form.items(),而是使用some_form.cleaned_data,它将返回一个已验证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(...)

相关问题 更多 >