2009-12-22 2 views
2

POST 요청의 데이터를 사용하여 Django formset을 채우려고합니다. 나는 formset을 적절히 표시 할 수 있었고 거의 다시 올바르게 인스턴스화 할 수 있었지만, formset이 끝에는 2 개의 빈 행으로 끝나는 문제가있어 바람직하지 않습니다. 다음은 우리가 views.py에서 사용했던 기능입니다 :POST 데이터를 기반으로 Django formset에 새 양식 추가

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

dep.html

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) 

forms.py 그건해야 모든 관련 코드가 있어야합니다. 어쨌든, 템플릿은 빈 행을 포함해야하는 전체 formset을 표시합니다 (또는 오류의 경우 빈 행이 아니라 마지막 행 위에 오류 메시지가 있음). 마지막 줄이 비어있는 상태에서 "추가"를 클릭하면 문제가 발생합니다. 코드에서 여전히 formset.is_valid()를 전달하므로 추가 필드가있는 새 formset을 만듭니다. 여기에 추가를 클릭하면 오류와 함께 반환되지만 마지막 행을 제외한 모든 항목을 채우고 유효한 formset을 만들 수 있습니다. 빈 양식이 유효성 검사에 실패해야한다는 것을 내 formset에 알리는 방법이 있습니까? 또는 이와 반대로 더 나은 방법이 있습니까? 페이지는 궁극적으로 일부 jquery 항목을 통합하도록 계획되었으므로 이상적인 것은 아니지만 jquery 도구를 사용하여이 문제를 해결할 수있는 좋은 방법이 있다면 충분할 것입니다. 고마워요! 당신의 views.py에서

답변

2

: 그것은 버그와 같은보다 기능처럼 꽤 많이 보이는

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

)

+0

은 그것을 짓을 할 수 있습니다. 고마워요! –

+0

당신은 환영합니다 :) –

관련 문제