次のコードを使用して、フォームセット内のフォームのすべてのフォーム フィールドを django クリスピー フォームの div にまとめています。
class OperatorForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(OperatorForm, self).__init__(*args, **kwargs):
self.helper = FormHelper(self)
self.helper.form_tag = False
self.helper.all().wrap_together(Div, css_class="operator-form")
self.helper.render_unmentioned_fields = True
class Meta:
model = Operator
fields = tuple(fields_list)
FormHelper を「self」でインスタンス化すると、すべてのフィールドを指定しなくてもレイアウトが自動生成されます。フィールドが動的に生成されるため、これが必要です。問題は、DELETE フィールドと ORDER フィールドがレイアウトに追加されていないことです。そこで、render_unmodified_fields を True に設定しました。この設定では、これら 2 つのフィールドは少なくともフォームに表示されますが、div の残りのフィールドでラップされません。
フォームセット内のフォームを手動で反復処理して div でラップできることはわかっていますが、これはこれまで行ってきたことですが、これにはフォームセットの非フォーム エラーを手動で処理する必要があり、通常は自動的に行われます。クリスピーで。
編集: 要求に応じてコードを更新しました。このクラス全体は実際には fields_list に値を設定するファクトリ メソッドにラップされているため、特定のフィールドのみを動的に含めることができます。ORDER と DELETE は意図的に省略されています。それらは自動的に検出され(それらを含めるとエラーになります)、フォームに表示されます。単に div にラップされません。