数時間の捜索の後、私は負けたことを認めなければなりません。
Django のドキュメントを読みましたが、問題の解決策が本当に見つかりません。
次のコード行を検討してください。
EmploymentFormSet = inlineformset_factory(Profile, Employment, form=EmploymentForm, extra=3)
UpdateView
このコードは、メソッドから継承し、さらにメソッド内のクラスベースのビューに存在しますget_context_data(self, *args, **kwargs):
inlineformset_factory が EmploymentFormSet を作成するため、これは非常に簡単です。
今これを考慮してください
queryset = Employment.objects.filter(profile__pk=self.kwargs['pk']).values()
context['emp_formset'] = EmploymentFormSet(prefix='emp_form', initial=queryset, auto_id=True)
initial=queryset
バインドされていないインスタンス IIRC にのみ適用される を指定することで、クエリセットに含まれる数だけフォームセットに入力されると考えました。
したがって、私の場合、クエリセットは4を返しますEmployments
が、パラメーターを使用するextra
と、構築しているフォームセットには、このパラメーターが定義する数だけが入力されます。私の例では、エクストラを3つしか定義していないため、3つだけです。エクストラをインクリメントすると、フォームがインクリメンタルに読み込まれます。
のサブクラス化を試みましたBaseInlineFormSet
が、実際には壁を突破していません。
私の質問は、クエリセットに含まれているのと同じ数のフォームをフォームセットに入力するにはどうすればよいかということです。私は正確な解決策を求めているわけではありませんが、正しい方向へのポインターです! :)
ありがとう!