如何使用formset保存多个表单?

时间:2016-02-11 10:17:58

标签: python django forms formset

我看到你可以使用屏幕将几种形式记录在一起,在我的例子中,我想同时回答几个问题。 我选择了我的问题并且我回答了我的问题,但它没有记录每当最后一个表格时...... 如何让它同时记录所有信息? 它每次只在我的数据库中注册最后一个表格...

  

所以我有这样的表格:

class NameForm(forms.ModelForm):
    class Meta:
        model = Reply
        fields = ('question','user','answer')
  

a views.py:

def get_name(request):
    questions = Question.objects.all()
    NameFormSet = modelformset_factory(model=Reply, form=NameForm, extra=2, max_num=2)
    logged_user = get_logged_user_from_request(request)
    if request.method == 'POST':  
        formset = NameFormSet(request.POST, request.FILES)
        if formset.is_valid():
            formset.save()
            return HttpResponse('Successfully')
        else:
            return render_to_response('polls/name.html')
    else:
        formset = NameFormSet()
    return render_to_response('polls/name.html', {'formset': formset, 'questions':questions,'logged_user':logged_user})

为了完成我的模板:

<form method="post" action="">
    <table>
        {{ formset }}
    </table>

     <input type="submit" value="Submit" />
</form>
  

我忘了把它记录在同一时间的所有表格中?

1 个答案:

答案 0 :(得分:0)

我会尝试给你一个正确的方法(我不会测试我给你的代码)。

您应该尝试在视图中定义表单数组:

questions = Question.objects.all()
form_list = []
if request.POST:
    for question in questions:
        current_form = NameForm(request.POST, instance=question)
        if current_form.is_valid():
            current_form.save()
            return HttpResponse('Successfully')
else:
    for question in questions:
        form_list.append(NameForm(instance=question))

并在模板中显示所有表单:

<form method="post" action="">
    {% for form in form_list %}
            <table>
                {{ form.asp_p }}
            </table>
    {% endfor %}
    <input type="submit" value="Submit" />
</form>

如果您想了解更多详情:

self.instance in Django ModelForm

django submit two different forms with one submit button