Я слежу за этим tutorial, а часть дублирования/удаления формы отлично работает, но сохраняется только первая форма. Из формы data
, я знаю, что значения существуют, а также то, что form-TOTAL_FORMS
должно быть 2 (или сколько угодно) вместо 1. Я предполагаю, что поэтому geo_form.cleaned_data
не содержит никакой второй формы. Я предполагаю, что если form-TOTAL_FORMS
соответствует, тогда все данные формы будут там. Если это так, как мне изменить форму управления? Если есть другое решение, как бы это сделать?Динамическое добавление форм в формсет, не сохраняющих/Руководство по обновлению руководства вручную?
(Pdb) for k, v in geo_formset.data.items(): print k, v
form-0-tables test1, test2, test3
form-0-name Shelburne, Burlington, Rutland
form-1-state OR
outfile x.xlsx
form-MAX_NUM_FORMS 1000
form-0-survey ACS1
form-1-name Washington, Clackamas
form-TOTAL_FORMS 1
form-0-years 2000
form-MIN_NUM_FORMS 0
form-INITIAL_FORMS 0
form-1-region county
form-0-state VT
form-0-region place
Ниже вид:
class Start(View):
def get(self, request):
GeoFormset = formset_factory(GeographyForm)
CensusFormset = formset_factory(forms.CensusForm)
geo_formset = GeoFormset()
cen_formset = CensusFormset()
out_form = forms.OutfileForm()
return render(
request,
'start.html',
{
'geo_formset': geo_formset,
'cen_formset': cen_formset,
'out_form': out_form
}
)
def post(self, request):
GeoFormset = formset_factory(GeographyForm, min_num=1, validate_min=True, extra=0)
CensusFormset = formset_factory(forms.CensusForm, min_num=1, validate_min=True, extra=0)
geo_formset = GeoFormset(request.POST)
cen_formset = CensusFormset(request.POST)
out_form = forms.OutfileForm(request.POST)
if geo_formset.is_valid() and out_form.is_valid() and cen_formset.is_valid():
import pdb; pdb.set_trace()
return HttpResponseRedirect(reverse('completed'))
else:
return render(
request,
'start.html',
{
'geo_formset': geo_formset,
'cen_formset': cen_formset,
'out_form': out_form
}
)
и шаблон
{% extends "base.html" %}
{% block body %}
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<form method="post" action="">{% csrf_token %}
{{cen_formset.management_form}}
{% for cen_form in cen_formset.forms %}
<fieldset>
<div class="census-formset">
Select a survey: {{ cen_form.survey }} | {{ cen_form.tables }}<br>
{{ cen_form.years }}
</div>
</fieldset>
{% endfor %}
<br>
{{geo_formset.management_form}}
{% for geo_form in geo_formset %}
<fieldset>
<div class="geo-formset">
{{ geo_form.as_p }}
</div>
</fieldset>
{% endfor %}
<br>
<fieldset>
{{ out_form.as_p }}
</fieldset>
<input type="submit" value="OK">
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.formset/1.2.2/jquery.formset.min.js"></script>
<style type="text/css">
.remove_text{
clear: left;
color: red;
}
</style>
<script type="text/javascript">
$('.census-formset').formset({
addText: 'add census',
deleteText: 'remove',
deleteCssClass: 'remove_text',
});
$('.geo-formset').formset({
addText: 'add regions',
deleteText: 'remove',
deleteCssClass: 'remove_text',
});
</script>
{% endblock %}
Примечание: Я использую Django 1.10.5