やる気がストロングZERO

やる気のストロングスタイル

django 複数のformが存在するページを作りたい[Formsetsを使う]

複数のデータ行を一括で登録できるような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エディタ、ほんと良いのがみつからない。