1

次のコードを使用して、フォームセット内のフォームのすべてのフォーム フィールドを 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 にラップされません。

4

1 に答える 1

0

Brian Dant が示唆したように、ORDER と DELETE を .xml ファイルに含める場合は手動で追加する必要がありLayoutます。私の問題は、それらをMetaクラスの「フィールド」にも渡したことです。

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.layout.extend(['ORDER', 'DELETE'])
        self.helper.all().wrap_together(Div, css_class="operator-form")

    class Meta:
        model = ApplicationOperator
        fields = tuple(fields_list)
于 2013-07-02T16:59:34.827 に答える