django formsets 및 javascript를 사용하여 동적 양식을 작성했습니다. 그러나 불행히도 양식 제출시 첫 번째 양식 만 제출됩니다. 동적으로 추가 된 모든 양식도 제출하겠습니다. 어떤 도움을 주시면 감사하겠습니다. 조회수 :둘 이상의 양식으로 동적 formset 저장
def routestepinfo(request):
class RequiredFormSet(BaseFormSet):
def __init__(self, *args, **kwargs):
super(RequiredFormSet, self).__init__(*args, **kwargs)
for form in self.forms:
form.empty_permitted = False
RouteStepFormSet = formset_factory(RouteStepForm, formset=RequiredFormSet, extra=1, can_order=False, can_delete=True)
if request.method == 'POST':
formset = RouteStepFormSet(request.POST)
if formset.is_valid():
for form in formset.forms:
form.save()
print 'apple'
return redirect("/buildpage/")
else:
formset = RouteStepFormSet()
return render(request, "buildpage/routestepinfo.html", {'formset' :formset})
HTML
<form id= "myForm" method = 'POST' action="{% url 'buildpage:routestepinfo' %}" enctype="multipart/form-data">{% csrf_token %}
{{ formset.management_form }}
<div id="form_set">
{% for form in formset %}
<table class='no_error'>
<tbody>.
{{form.as_table}}
</tbody>
</table>
{% endfor %}
</div>
<p><input type = "button" value = "Add another step" id = "add_more" ></p>
<div id="empty_form" style="display:none">
<table class='no_error'>
{{ formset.empty_form.as_table }}
</table>
</div>
<div id="forms"></div>
<p> </p>
<p> </p>
<input type = "submit" name = "Submit Steps">
</form>
JS 클론 :
<script>
$('#add_more').click(function() {
var form_idx = $('#id_form-TOTAL_FORMS').val();
$('#form_set').append($('#empty_form').html().replace(/__prefix__/g, form_idx));
$('#id_form-TOTAL_FORMS').val(parseInt(form_idx) + 1);
});
</script>
각 동적 양식에 고유 한 이름 속성을 부여하는 것으로 보이지 않습니다. 예. 'formset.empty_form.as_table' 안에있는 INPUT의 모든 것들은 이름 속성을 수정할 필요가있을 것입니다. 물론'__prefix__' 접두어가 붙지 않는 한. 크롬 디버거에서 양식을 보면 모든 필드가 고유 한 이름 속성을 갖게됩니다. – Keith
안녕 키스, 내가 오해하지 않는 한 BaseFormSet이 __prefix__의 자동 접두사를 제공한다는 문서에 따르면. ''BaseFormSet''은 추가 매개 변수''empty_form'을 제공합니다. 이것은 형태의 접두어가''__prefix__'' 인 형태로, 형태의 자바 스크립트로보다 쉽게 사용할 수 있도록 반환합니다. –
그래서 후속 질문은 자바 스크립트를 통해 각 추가 양식에 고유 한 ID를 만드는 방법이 있습니까? –