0

我有一个模型表单,用户可以提交它以将信息保存到数据库中。我想用 ModelFormset 对其进行扩展,以便用户可以同时查看和提交具有不同信息的多个相同模型表单。但是,我的 POST 数据未绑定到 ModelFormset,因此 ModelFormset 在is_valid(). 我看到有相关的数据request.POST.copy(),它只是

视图.py

def create(request):
    if request.method == 'POST':
        post_data = request.POST.copy()
        print "POST DATA"
        print post_data
        for i in post_data:
            print i
        formSet = WorkOrder_Form(post_data)
        print "FORMSET"
        print formSet
        if formSet.is_valid():
            formSet.save()
        else:
            print 'INVALID'
        return HttpResponseRedirect('/Shelling/') 
    else:
        formSet = formset_factory(WorkOrder_Form, extra=1)
        return render_to_response('create.html',{'WorkOrder_Form':formSet}, context_instance=RequestContext(request))

模板:(create.html)

{% load url from future %}
<a href="{% url 'index' %}"> Return to Index </a></li>
<br>
<br>
<form action="{% url 'create' %}" method="post"> {% csrf_token %}


{% for WorkOrder in WorkOrder_Form %}
    {{ WorkOrder.as_ul }}
    <br>
{% endfor %}

4

1 回答 1

1

您正在使用模型表单,因此您应该使用modelformset_factory而不是formset_factory. create您可以在视图之外创建表单集类。然后,您需要在视图的GET POST分支中实例化表单集。

放在一起,你有以下(未经测试,所以可能有一些错别字!)

WorkOrderFormSet = formset_factory(WorkOrder_Form, extra=1)

def create(request):
    if request.method == 'POST':
        post_data = request.POST.copy()
        formset = WorkOrderFormSet(data=post_data, queryset=WorkOrder.objects.none())
        if formset.is_valid():
            formset.save()
        else:
            print 'INVALID'
        return HttpResponseRedirect('/Shelling/') 
    else:
        formset = WorkOrderFormSet(queryset=WorkOrder.objects.none())
        return render_to_response('create.html',{'formset':formset}, context_instance=RequestContext(request))

在模板中:

{% for form in formset %}
    {{ form.as_ul }}
{% endfor %}
于 2013-01-08T20:20:49.957 回答