Python 将来自多个表单的数据合并到Django
我有3种不同的形式,如下所示: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
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的复杂性的情况下,我可能提供了一个无知的观点,但您始终可以将代码分成三个独立的视图,并在会话中持久化表单数据,最后将其合并。