2011-07-16 32 views
6

我在我的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") 
    ) 

我在我的網站上使用這種形式在兩個地方。其中一個地方,我想顯示除is_manager字段外的所有字段,但我想將此字段的默認值設置爲True。在另一個地方,我想顯示的形式和其所有領域,包括is_manager領域,我希望它有一個默認值False.

我該怎麼做到這一點?似乎是一件小事,但我無法弄清楚。

謝謝。

回答

12

您可以使用窗體的__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) 
+0

嗨克拉斯。我將小部件更改爲隱藏輸入。我怎樣才能給它分配一個默認值?謝謝。 –

+0

你可以使用字段的「初始」關鍵字參數,或更改窗體的「初始['字段']」,我總是會忘記哪一個實際工作。 –

1

如果功能是不同的,你可以使用來自其他繼承一種形式和sutiably顯示(即排除領域)。

此外,可以使用Form的init方法接受參數,並且可以使用它來初始化表單的字段值。

相關問題