Djangoでのinline formsetの使用方法


  1. 必要な準備

    • django.forms.inlineformset_factory関数を使用して、FormSetクラスを作成します。この関数には、親モデル、関連モデル、フォームクラス、追加のパラメータなどが必要です。
  2. テンプレートの設定

    • テンプレートで{{ formset.management_form }}を使用して、フォームの管理フォームを表示します。これにより、フォームの追加と削除の操作が可能になります。
    • テンプレート内で、{{ formset.as_table }}{{ formset.as_ul }}、または{{ formset.as_p }}を使用して、フォームフィールドを表示します。
  3. ビューの設定

    • ビューで、親モデルのインスタンスを取得します。これにより、関連する子モデルのフォームを作成することができます。
    • フォームセットの初期データを設定する必要がある場合は、querysetパラメータを使用して関連するモデルのインスタンスを指定します。
    • POSTリクエストの場合は、フォームセットをバリデーションし、保存します。

以下に、コード例を示します。

# forms.py
from django.forms import inlineformset_factory
from .models import ParentModel, ChildModel
ChildFormSet = inlineformset_factory(ParentModel, ChildModel, fields=('field1', 'field2'))
# views.py
from django.shortcuts import render
from .models import ParentModel
from .forms import ChildFormSet
def parent_view(request):
    parent_instance = ParentModel.objects.get(id=1)
    formset = ChildFormSet(instance=parent_instance)
    if request.method == 'POST':
        formset = ChildFormSet(request.POST, instance=parent_instance)
        if formset.is_valid():
            formset.save()
    return render(request, 'template.html', {'formset': formset})

このように、inline formsetを使用すると、親モデルと関連する複数の子モデルを効率的に編集することができます。上記のコードを参考にして、自身のプロジェクトに適応してみてください。