Я пытаюсь заполнить набор форм Django, используя данные из запроса POST. Я могу правильно отобразить набор форм и создать его экземпляр в основном нормально, но у меня возникла проблема, когда набор заканчивается двумя пустыми строками в конце, что нежелательно. Ниже приведена функция, которую мы использовали в views.py:
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.is_valid (), поэтому он создает новый набор форм с дополнительным полем. Если вы нажмете «Добавить здесь», он вернется с ошибками, но все же позволит вам заполнить все строки, кроме последней, и создать правильный набор форм. Есть ли способ сообщить моему набору форм, что пустые формы не пройдут проверку? Или в качестве альтернативы есть лучший способ сделать это? В конечном итоге планируется, что на странице будут интегрированы некоторые jquery, так что пока это не идеально, если есть хороший способ решения этой проблемы с использованием инструментов jquery, которые, вероятно, будут достаточно хорошими. Большое спасибо!