我正在使用 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()