【问题标题】:repeated modelform not validating in modelformset - django重复的模型表单在模型表单集中没有验证 - django
【发布时间】:2012-12-22 18:52:30
【问题描述】:

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

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

【问题讨论】:

    标签: django modelform


    【解决方案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 %}
    

    【讨论】:

      猜你喜欢
      • 2012-08-13
      • 1970-01-01
      • 2011-06-26
      • 2017-06-14
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多