2013-01-08 5 views
0

사용자가 제출하여 정보를 데이터베이스에 저장할 수있는 ModelForm이 있습니다. 사용자가 동시에 다른 정보로 동일한 모델 양식을 여러 번보고 제출할 수 있도록 ModelFormset으로 확장하려고합니다. 그러나 내 POST 데이터는 ModelFormset에 바인딩되어 있지 않으므로 ModelFormset은 is_valid()에 무효화됩니다. 나는 그냥modelformset이 modelformset에서 유효성 검사를 거치지 않았습니다 - django

views.py, request.POST.copy()과 관련된 데이터가 참조

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

, 따라서 formset_factory 대신 modelformset_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 %}