将子类型模型组合到父模型中

时间:2012-11-07 22:27:11

标签: django

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

1 个答案:

答案 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()