私はtutorialをフォローしていますが、フォームの複製/削除部分はうまくいきますが、最初のフォームのみ保存されます。 formsetのdata
から、私は値が存在することを知っているだけでなく、form-TOTAL_FORMS
は2ではなく、1よりも多くなければならないことを知っています。これはgeo_form.cleaned_data
に第2の形式が含まれていないと仮定していると仮定しています。私は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 %}
注:私はあなたが必要とする、1つのビューで複数のフォームセットを持っているためにDjango 1.10.5