0

ユーザーが情報をデータベースに保存するために送信できる ModelForm があります。ユーザーが複数の同じモデル フォームを異なる情報で同時に表示および送信できるように、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ます。ビューの外でフォームセット クラスを作成できますcreateGET 次に、ビューのおよび 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 に答える