2

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

1 回答 1

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()
于 2012-11-07T22:30:27.770 回答