複数のデータ行を一括で登録できるようなFormのあるページを作成したい場合。
[名前][年齢] [ ][ ] [ ][ ] [ ][ ] ……(繰り返し) [登録ボタン]
みたいな感じのページ
Formsetsを使う
https://docs.djangoproject.com/ja/2.0/topics/forms/formsets/
使い方
# form classを定義する
class PersonForm(forms.Form):
name = forms.CharField(label='名前')
age = forms.IntegerField(label='年齢')
# viewメソッドはこんな感じ
def views(request):
PersonFormSet = formset_factory(PersonForm, extra=10, max_num=10, validate_max=True) # こうしておくと10以上の入力があるとバリデーションで弾いてくれる
person_formset = PersonFormSet()
if request.method == 'POST':
person_formset = person_formset(request.POST)
if person_formset.is_valid():
# person_formset.cleaned_dataからデータを取得して処理
else:
# バリデーションエラー
else:
return render(request, 'template_name', {
'person_formset': person_formset,
})
<form action="" method="post">
{% csrf_token %}
<ul>
{% for form in person_formset %}
<li>{{ form }}</li>
{% endfor %}
</ul>
{{ person_formset.management_form }}
<input type="submit" value="登録" />
</form>
wordpressのcodeエディタ、ほんと良いのがみつからない。