1

上部にタブを表示する Web ページを作成しようとしています。各タブは、複数のモデルに関連しています。私は次のようにCrispyFormsを使用しています:

class TestCrispyForm(forms.ModelForm):
    helper = FormHelper()
    helper.form_tag = False
    helper.layout = Layout(
        TabHolder(
            Tab(
                'Name',
                'firstname',
                'lastname'
             ),
            Tab(
                'Address',
                'address',
                'city',
                'state'
             ),
            Tab(
                'Miscellaneous',
                'sex',
                'age',
                'birthday',
                'email'
            ),
        )
    )

    class Meta:
         model = PtData

class TestCrispyForm2(forms.ModelForm):
    helper = FormHelper()
    helper.form_tag = False
    helper.layout = Layout(
        TabHolder(
            Tab(
                'Tab 3',
                InlineRadios('HypertensionHX')
            ),
            Tab(
                'Tab 4',
                'DNADX'
            ),
        )
    )

    class Meta:
        model = PtHx

両方のフォームを組み合わせて、レンダリングされたページの上部にタブを表示したいと思います...ここにHTMLコードがあります:

<form action="" method="POST">{% csrf_token %}

{% crispy form %}
{% crispy form2 %}

    <input type="submit" value="Submit">
</form>

これは機能しますが、フォームを順番に表示し、私の人生ではできません(ここでは危険であることを十分に知っています;))これを理解してください。誰?

この件についてご支援/ご協力いただきありがとうございます。

-ボブ-

4

1 に答える 1

2

すべてのタブを 1 つのホルダーに配置したい場合は、「TabHolder」マークアップを手動で作成するだけです (ブラウザーから自動生成されたものをコピーして貼り付けます) 。フォームをいくつかのヘルパーに分割できます。

class CommonFormHelper(FormHelper):
    def __init__(self):
        super(CommonFormHelper, self).__init__()
        self.disable_csrf = True
        self.form_tag = False


class TestCrispyForm(forms.ModelForm):
    class Meta:
        model = PtData

    def __init__(self, *args, **kwargs):
        self.helper_name_info = CommonFormHelper()
        self.helper_name_info.layout = Layout(
            Tab(
                'Name',
                'firstname', 'lastname',
            ),
        )

        self.helper_location_info = CommonFormHelper()
        self.helper_location_info.layout = Layout(
            Tab(
                'Address',
                'address', 'city', 'state',
            ),
        )

        self.helper_personal_info = CommonFormHelper()
        self.helper_personal_info.layout = Layout(
            Tab(
                'Miscellaneous',
                'sex', 'age', 'birthday', 'email',
            ),
        )
        super(TestCrispyForm1, self).__init__(*args, **kwargs)


class TestCrispyForm2(forms.ModelForm):
    class Meta:
        model = PtHx

    def __init__(self, *args, **kwargs):
        self.helper_some_info = CommonFormHelper()
        self.helper_some_info.layout = Layout(
            Tab(
                'Tab 3',
                InlineRadios('HypertensionHX'),
            ),
        )

        self.helper_some_other_info = CommonFormHelper()
        self.helper_some_other_info.layout = Layout(
            Tab(
                'Tab 4',
                'some_other_field_or_whatevere_you_want_here',
            ),
        )
        super(TestCrispyForm2, self).__init__(*args, **kwargs)

テンプレート:

{# ... #}
<form method="post" enctype="multipart/form-data" class="mainForm">{% csrf_token %}
     {# paste begin of TabHolder markup #}
         {# of course you can change ordering =) #}

         {% crispy form form.helper_name_info %}
         {% crispy form form.helper_location_info %}
         {% crispy form form.helper_personal_info %}
         {% crispy form2 form2.helper_some_info %}
         {% crispy form2 form2.helper_some_other_info %}
     {# paste end of TabHolder markup #}

     <input type="submit" value="Submit">
</form>
于 2015-05-20T07:46:22.373 に答える