アプリで Django のフォーム ウィザードを使用しています。全部で 5 つのフォームがありますが、特定の条件に基づいて 2 つのフォームをスキップしたり、特定の条件に基づいて 2 つのフォームから 1 つのフォームをスキップしたりできるため、送信できるフォームは 3 つまたは 4 つだけです。
SessionWizardView の done メソッドが返すリストの内容は次のとおりです。
[<test.myapp.models.AForm object at 0x0177EC10>, <test.myapp.models.BForm object at 0x01796150>, <test.myapp.models.CForm object at 0x01796530>, <test.myapp.models.DForm object at 0x01796910>, <test.myapp.models.EForm object at 0x01333540>]
フォームを保存するには、次のことを行っています。
a = form_list[0].save(commit=False)
a.save()
b = form_list[1].save(commit=False)
b.parent_id = a
b.save()
c = form_list[2].save(commit=False)
c.parent_id = a
c.save()
d = form_list[3].save(commit=False)
d.parent_id = a
d.save()
d = form_list[4].save(commit=False)
d.parent_id = a
d.save()
おわかりのように、4 つのフォームのみが送信された場合、リスト インデックス 4 は存在せず、「リスト インデックスが範囲外です」というエラーが表示されます。3 つのフォームのみがリスト インデックス 3 および 4 で送信された場合も同様です存在しない。私の質問は 2 つあります。1 つは存在しないリスト インデックスの問題を解決する方法、2 つはコードをより効率的にする方法です。
どうもありがとう