8

Djangoには、次のようなフォームがあります。

class PersonnelForm(forms.Form):
    """
    Form for creating a new personnel.
    """
    username = forms.RegexField(
        required=True, max_length=30, label=_("Name")
    )
    is_manager = forms.BooleanField(
        required=True, label=_("Is Manager")
    )

私はこのフォームを自分のサイトの2か所で使用しています。その場所の1つとして、フォームとそのフィールドを除くすべてのフィールドを表示したいis_managerのですが、このフィールドのデフォルト値をに設定したいと思いますTrue。別の場所で、フォームとそのフィールドを含むすべてのフィールドを表示したいis_managerのですが、デフォルト値をFalse.

どうすればこれを達成できますか?些細なことのようですが、私にはわかりません。

ありがとう。

4

2 に答える 2

14

フォームの__init__メソッドを使用して、フィールドを非表示(または削除)できます。

class PersonnelForm(forms.Form):
    """
    Form for creating a new personnel.
    """
    username = forms.RegexField(
        required=True, max_length=30, label=_("Name")
    )
    is_manager = forms.BooleanField(
        required=True, label=_("Is Manager")
    )

    def __init__(self, *args, **kwargs):
        delete_some_field = kwargs.get('delete_some_field', False)
        if 'delete_some_field' in kwargs:
            del kwargs['delete_some_field']
        super(PersonnelForm, self).__init__(*args, **kwargs)
        if delete_some_field:
            del self.fields['is_manager']
            # or
            self.fields['is_manager'].widget = something_else

#views.py
form = PersonnelForm(...., delete_some_field=True)
于 2011-07-16T12:37:34.470 に答える
1

機能が異なる場合は、一方のフォームをもう一方のフォームから継承して適切に表示する(つまり、フィールドを除外する)ことができます。

また、Formのinitメソッドは引数を取るように作成でき、これを使用してフォームのフィールド値を初期化できます。

于 2011-07-16T13:37:34.040 に答える