2009-12-22 57 views
2

我试图填充使用来自POST请求的数据Django的表单集中。我能够正确显示该formset和实例再次大多还好,但我在这里该formset与结尾,这是不可取的2个空白行结束了一个问题。下面是我们一直在使用中views.py功能:添加新的形式,以一个Django FORMSET基于POST数据

forms.py

class DepositForm(forms.Form): 
    InsID = forms.IntegerField() 
    DepositTypeID = forms.IntegerField() 
    DepositAmount = forms.IntegerField() 
    Account = forms.IntegerField() 

DepositFormSet = formset_factory(DepositForm, extra=1) 

views.py

def _DepositEditor(request, c): 
    if request.POST.has_key('form-0-InsID'): 
     formset = DepositFormSet(request.POST) 
     if formset.is_valid(): 
      formset = DepositFormSet(initial=formset.cleaned_data) 
    else: 
     formset = DepositFormSet() 
    c['formset'] = formset 

    return render_to_response('deposits/dep.html', c) 

dep.html

<form action="" method="post"> 

{{formset.management_form}} 
{% for form in formset.forms %} 
    {{form.errors }} 
    {% for field in form %} 
     {{field.label}}: {{field}} 
    {% endfor %} 
    <br /> 
{% endfor %} 

<input type="submit" name="add" value="Add Deposit"></input> 

</form> 

应是所有相关的代码。无论如何,该模板显示了整个formset,它应该包含一个空行(或者在出现错误的情况下,没有空白行,但是在最后一行之上的错误消息)。当您单击“添加”并将最后一行留为空白时,就会出现问题。在代码中,这仍然会传递formset.is_valid(),所以它会使用一个额外的字段创建新的表单集。如果点击这里添加,它会返回错误,但仍然允许您填写除最后一行以外的所有内容并生成有效的表单集。有没有办法告诉我的formset空白表单应该失败验证?或者,有没有更好的方法来做到这一点?该页面最终计划集成一些jQuery的东西,所以虽然这并不理想,但如果有一种很好的方法来使用jquery工具来解决这个问题,那可能会足够好。非常感谢!

回答

2

在你views.py:

-   formset = DepositFormSet(initial=formset.cleaned_data) 
+   data = formset.cleaned_data 
+   if data[-1]=={}: 
+    data=data[:-1] 
+   formset = DepositFormSet(initial=data) 

它看起来很像不是像一个bug的特征;)

+0

这看起来已经做到了。非常感谢! – 2009-12-23 14:43:00

+0

不客气:) – 2009-12-24 12:41:45