gpt4 book ai didi

python - 合并来自多个表单 Django 的数据

转载 作者:太空宇宙 更新时间:2023-11-03 17:46:53 25 4
gpt4 key购买 nike

我有 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 中,然后保存它。但是,我不确定如何连接这三种表单中的信息。我尝试用字典的方式来做,但没有成功。完成这种串联的最佳方法是什么?

编辑:阅读 Form API 文档后,我终于弄清楚了。这就是我聚合 3 个表单中的信息的方法:

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

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

最佳答案

不要使用 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(...)

关于python - 合并来自多个表单 Django 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29654279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com