2009-12-22 51 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

相關問題