2011-02-07 64 views
1

我在PHP/ZEND中擁有強大的背景,現在我正在使用學習Python/Django。在Zend中,您可以隨時獲取表單元素對象並進行編輯。這非常棒,因爲您可以採用表單對象並根據需要對其進行小的更改,而無需創建全新的表單對象。我正在嘗試這是在Django。Python/Django - 創建後編輯模型表格

我有一個表格。讓我們稱它爲投票。這種形式可能需要在不同的視圖方法中應用不同的小部件。我不想重新創建這樣一個小小的改變整個窗體...

form = VoteForm(initial={}) 
## then something like 
form.field.widget = newWidget 

基本上, 我想修改模型表單元素的對象已在內部意見後,產生...

回答

4

你回答了你自己的問題:這(幾乎)你是怎麼做到的!

# tested on 1.2.3 
form = VoteForm(initial={}) 
form.fields['field_name'].widget = forms.HiddenInput() # make sure you call widget() 

form.as_p() # shows new widget 
+0

我試過這種方法沒有成功。我有一個我想隱藏的領域。當我應用這種技術時,表單元素不會顯示爲隱藏。你能給我一個例子,說明你如何在django中做到這一點? (你如何使用內置的小部件?) – GregL83 2011-02-07 21:07:14

1

另一種方式是重寫窗體的初始化()方法,像:

class VoteForm(forms.Form): 
    myfield = ... 
    def __init__(self, hide_field=False, *args, **kwargs): 
     super(VoteForm, self).__init__(*args, **kwargs) 
     if hide_field: 
      self.fields['myfield'].widget = ... 

form = VoteForm(hide_field=True, initial={}) 

我個人比較喜歡這種方法,使所有形式邏輯在一個地方,而不是周圍蔓延。假設你的表單和視圖在不同的文件中,意味着你不需要做多個'從django導入表單'來獲取視圖中的小部件。