2013-01-08 42 views
0

我有一個ModelForm,用戶可以提交將信息保存到數據庫。我想用ModelFormset擴展它,以便用戶可以同時查看和提交多個具有不同信息的相同模型表單。但是,我的POST數據沒有綁定到ModelFormset,所以ModelFormset在is_valid()上失效爲無效。我看到有一個與request.POST.copy()相關的數據,它只是重複modelform不驗證在modelformset - django

views.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 %} 

回答

1

您正在使用模型的形式,所以你應該使用modelformset_factory而不是formset_factory。您可以在create視圖之外創建formset類。然後,您需要實例化您視圖的分支中的GETPOST分支中的formset。

將其組合在一起,你有以下

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 %}