我正在使用django的表单向导进行调查,我想将整个调查保存到单个模型中。我已将模型拆分为多种形式,以便在每个FormWizard步骤中拥有模型的子集。 问题是,如何在最后将它们组合在一起? 我的models.py看起来像这样:
class BigSurvey(models.Model):
field1 = models.TextField()
field2 = models.TextField()
...
field40 = models.CharField(max_length=10)
和我的forms.py是这样的:
class FirstPageForm(ModelForm):
class Meta:
model = BigSurvey
fields = ('field1', 'field2')
class SecondPageForm(ModelForm):
class Meta:
model = BigSurvey
fields = ('field3', 'field4')
依此类推,共有4种形式和30个领域。每个子类型模型形式的字段组合在一起,是BigSurvey模型中的所有字段。
这让我可以将BigSurvey分成四个步骤。表单向导返回一个对象form_list,它是四个表单(FirstPageForm,SecondPageForm等)中每个表单的列表。
如何将这四种形式组合成一个BigSurvey对象来保存?
更新 通过迭代表单和字段并使用值字典填充新表单来解决此问题。使用setattr填充(根据Colleen的答案),会产生一个未绑定的表单。 我的工作解决方案:
newvalues={}
for form in form_list:
for field in form.cleaned_data.keys():
newvalues[field]=form.cleaned_data[field]
newform = QuestForm(newvalues)
newform.save()
答案 0 :(得分:1)
您可以迭代每个表单中的所有字段,并将BigSurvey字段分配给它们的值。
bg = BigSurvey()
for form in form_list
for field in form.cleaned_data.keys():
setattr(bg, field, form.cleaned_data[field])
bg.save()