2011-07-16 9 views
6

を設定します。私は自分のサイトに2つの場所でこのフォームを使用しは条件付きで表示され、フォームフィールドを隠し、私は次のようになります私のジャンゴのフォーム持つフィールドの値

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") 
    ) 

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

どのようにすればいいですか?些細なことだと思うが、私はそれを理解することはできない。

ありがとうございました。機能が異なっている場合は、フィールドを非表示に(または削除)するために、フォームの__init__メソッドを使用することができ

答えて

12

、すなわち

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) 
+0

こんにちはクラース。ウィジェットを隠し入力に変更しました。どのように私はそれにデフォルト値を割り当てることができますか?ありがとう。 –

+0

フィールドの "initial"キーワード引数を使用するか、フォームの "initial ['field']"を変更することができますが、どちらが実際に動作するかは常に忘れています。 –

1

、あなたが他の一つの形を継承使用してsutiably表示することができます(つまり、フィールドを除外)。

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

関連する問題