Я построил динамические формы с использованием django formsets и javascript, но, к сожалению, при отправке формы отправляется только первая форма. Я бы хотел, чтобы все динамически добавленные формы также были представлены. Любая помощь будет оценена по достоинству. Просмотров:Сохранение динамических форм с более чем одной формой
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 Clone:
<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>
Кажется, что каждая динамическая форма не дает уникального атрибута имени. например. любые INPUT и т. д. внутри вашей 'formset.empty_form.as_table' будут нуждаться в изменении атрибута имени. Если, конечно, у вас нет префикса '__prefix__'. Если вы посмотрите на формы в хром-отладчике, все они получат уникальные атрибуты имени. – Keith
Привет Кит, согласно документам, предоставляющим BaseFormSet, дает автоматический префикс __prefix__, если только я не понял. '' BaseFormSet'' предоставляет дополнительный атрибут '' empty_form'', который возвращает экземпляр формы с префиксом '' __prefix__'' для упрощения использования в динамических формах с использованием JavaScript. –
Итак, я думаю, что следующий вопрос: существует ли способ создания уникальных идентификаторов с каждой дополнительной формой через javascript? –